打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
在Windows环境下的使用pthreads
这几天在研究C++内存管理器的多线程版本,其中用到了POSIX的pthread.h。于是我就想测试一下其中的代码,但网上查发现这是Linux环境下的库。Windows本身没有提供对POSIX的支持。但有一个叫 POSIX Threads forWin32 的开源项目给出了一个功能比较完善的Windows下pthreads API的实现。目前的最新版本是Pthreads-w32release 2.8.0(2006-12-22)。我的探索过程就是在使用这个API的过程在摸索的,我把过程都写下来,希望对以后探索这个API使用的同学会有好处。
首先去搜索pthread.h的下载很快就会找到pthreads库的下载地址,http://sourceware.org/pthreads-win32/。ps:校园网的用户是上不了外国网站的,我用了个计时的代理,挺便宜的,需要的时候就连接,下载完了就断开,呵呵,用迅雷下载会快很多哦。我下载了一个较新的发布版本:pthreads-w32-2-8-0-release.exe,这是一个自解压文件,我把它解压在D:\ProgramFiles\pthread\,解压后会有文件夹Pre-built.2,这里包含了需要用到的头文件和链接文件。
之后就写了一个测试多线程的代码,如下:testThread.cpp
#include<pthread.h>
#include<iostream>
using std::cout;
using std::endl;
using std::cin;
class ABClock{
public:
virtual ~ABClock(){}
virtual void lock()=0;
virtual void unlock()=0;
};
class MutexLock:public ABClock{
public:
MutexLock(){ pthread_mutex_init(&alock,NULL);}
~MutexLock(){ pthread_mutex_destroy( &alock);}
inline void lock(){ pthread_mutex_lock(&alock);}
inline void unlock(){ pthread_mutex_unlock( &alock);}
private:
pthread_mutex_t alock;
};
int main()
{
cout<<"hello"<<endl;
MutexLock thelock;
thelock.lock();
cout<< "locked"<<endl;
thelock.unlock();
int a;
cin>>a;
return 0;
}
上面代码就是直接调用pthreads中的函数来实现线程锁,但编译肯定是通不过的了,提示找不到头文件pthread.h。
不了解VC的后果呀,这时候真想有个同学或老师可以辅导我,但是应该找不到了,同学又没兴趣理这个,老师就更不用说,而且老师也不一定知道这个。我只能在百度知道求助了。http://zhidao.baidu.com/question/69168684.html这是这个贴。回答说在VC里的Tool的Option里增加了头文件的路径就行了。试了一下,果然找得到头文件了,至少编译通过了,但连接没通过。但百度知道他的回答也解决了上一个问题,马上选为最佳答案。
之后的编译过程老是不能成功,问题提示连接错误。VC6.0的错误提示是这样的:
--------------------Configuration: testThread - Win32 Debug--------------------
Linking...
testThread.obj : error LNK2001: unresolved external symbol __imp__pthread_mutex_init
testThread.obj : error LNK2001: unresolved external symbol __imp__pthread_mutex_destroy
testThread.obj : error LNK2001: unresolved external symbol __imp__pthread_mutex_lock
testThread.obj : error LNK2001: unresolved external symbol __imp__pthread_mutex_unlock
Debug/testThread.exe : fatal error LNK1120: 4 unresolved externals
Error executing link.exe.
testThread.exe - 5 error(s), 0 warning(s)
我把这些连接错误提示在Google里搜索,倒也真的找到了几个同样情况的帖子,都在在国外的网站来的,但网页里的内容是一个样的,就是一个程序写给某某的邮件,提到了这个问题,但没有解答。在百度里根据就是一些没用的结果。看来没办法了,我这样的搜索高手都搜不到。暂时放弃了这个调试的过程。
但有一个问题疙瘩在心里总不舒服,而且还要研究多线程内存池的性能问题,又开始各种尝试了。我想使用一个公布的CAPI的使用方法都类似吧。想到了计算机图形学里老师教我们使用OpenGL库的方法,马上找老师的课件找出来,这些课件都还保留在电脑里,我的硬盘大嘛。
按使用OpenGL库的方法,在VC里安装OpenGL的过程就是几个复制过程,原本内容是这样的:
GLUT的安装
下载glut包,包含5个文件:glut.h, glut.lib, glut32.lib, glut.dll, glut32.dll
以VisualStudio 6 为例,(VisualStudio2005等类似)
把glut.h 放到vc安装文件夹的include文件夹的gl目录下(若不确定路径,用查找文件gl.h 搜索,放在与gl.h 相同的文件夹中)
把glut.lib glut32.lib 放到vc安装文件夹的lib文件夹中
把glut.dll glut32.dll  放到windows\system32文件夹内
我用类似文件的复制过去,感到一阵轻松,这么辛苦的调试过程应该可以结束了吧,心里自然高兴。用VC6.0打开testThread.cpp点编译,成功,点连接,结果马上出现。我又沮丧了。还是同样的提示连接错误。这什么问题呢。这已经接近崩溃...
每当崩溃的时候我会想起百度知道,又去问题了一个问题,但这个问题太偏,我想找到答案的希望也不大,就是这个帖子:http://zhidao.baidu.com/question/69334905.html
只能等别人回答了,看一下连续剧吧,减少一下压力,最近在看少年青天第一部,呵呵,第三部看完了。我还是喜欢这种推理形的连续剧。之前看完了神探狄仁杰1,2,3部了,嘿。
又过了一天,我想凭我的搜索水平,如果在网上有这个问题的解答,我一定能把它搜出来的,主要是关键词的选取问题而已,当然Google才是搜索的主角。(我在卖广告吗?)之前我都是搜索那些连接错误的信息。太偏了吧。就改为搜索 "C++ 多线程",根据结果慢慢的修改关键词,改到'C++线程", "Windows 线程",竟能把我在百度知道里的提问搜出来,看来百度知道的PageRank还是挺高的嘛。最后搜索"Windowspthread”的时候奇迹出来了,Google都被我的执著感到了吧。
终于被我搜到了“Windows下 POSIX 线程编程":http://read.newbooks.com.cn/info/179364.html。这遍文件解决了我的问题。其中介绍指定link时要连接的库的名称(pthreadVC2.lib),在VC++ 6.0(工程--》设置--》连接)里的库模块里增加pthreadVC2.lib,连接就通过了,运行出现了可爱的预计结果:
hello
locked
那时已经是深夜1点半左右了,非常高兴,感到心头有点放松,我想应该睡一觉舒舒服服的了吧,就睡了。
我想这个探索差不多接近尾声了,但想到VC6.0就有成功了,但在DEV-C++或在其它编译器里又怎么办呢。
在前面的那帖子里顺藤摸瓜的找到了候捷的一篇文件,在 console mode 中使用 C/C++ 编译器:
http://blog.csdn.net/liuyongjin1984/archive/2008/01/07/2029405.aspx。其实各种编译器都在以这些配置作为参数调用编译,连接命令而已。如果会在命令行里的自己编译了,就应该把这个掌握了。就采用命令行的方式再编译一次。类似于这样:
》cl.exe main.cpp  /c  /I"c:pthreads-w32-2-7-0-releasePre-built.2include"
》link.exe  /out:main_cl.exe  main.obj  /LIBPATH:"c:pthreads-w32-2-7-0-releasePre-built.2lib"   pthreadVC2.lib
果然能成功编译连接,探索完毕。
终于写完了,在学习的过程中互联网发挥了极大的作用呀,最重要的就是Google了。追本溯源,其实佩奇和布林才是我要谢的人啦。这个探索应该告一段落了,我要继续探索多线程的问题了,特别把这经历写下来,以作记念。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
OpenGL的安装 - OpenGL - O(∩_∩)O
在VS2013中配置openGl的心得
win7 64bit下安装openGL的freeglut
VC6.0中OpenGL开发环境配置
Win8+VS2012配置OpenGL SuperBible的环境
第一个OpenGL
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服