在windows下配置pthread

爷,独闯天下 提交于 2020-12-29 07:28:55

      Pthread是由POSIX提出的一套通用的线程库,在linux平台下,他被广泛的支持,而windows平台下,却并不被支持,而pthreads-w32为我们提供了解决方案,本文我们准备在我们的windows平台下进行pthread-w32的安装,在网络上有类似的文章,但是讲的都是比较老的平台,在windows8下支持并不全面,不过可以作为参考。我们在这里贴出几个网址,供参考使用。

       Windows 7 64bit和Visual Studio 2010下安装及使用Pthread-w32 2.8 

       windows下使用pthread库(转)

        如果你的是XP系统或者win7 32位系统,那么,那两篇文章已经足以你完成pthread-w32的安装了。现在,我们开始讲我们的尝试过程。

一、安装平台

        windows8 64位系统,Microsoft Visual Studio 2012

二、pthreads-w32 下载地址

        我们这里下载最新版本pthreads-w32-2-9-1

        ftp://sourceware.org/pub/pthreads-win32/pthreads-w32-2-9-1-release.zip

        下载后解压,可以看到共有三个文件夹

        

        我们用到的主要是“Pre-built.2”这个文件夹下的三个文件夹,分别是动态链接库、头文件、静态链接库

          

三、配置头文件及静态链接库

        这里有多种方式,我们这里只提到我们用到的一种,总之目的是让我们建立的工程能够找到对应的头文件、静态库文件,以及运行时程序能够找到动态链接库文件。

这里,我们直接把头文件拷贝到Visual Studio的默认路径的头文件中,即把include文件夹中的三个文件直接拷贝到Visual Studio安装目录下VC->include文件夹下,例如我将include中文件拷贝到的位置是

E:\Program Files\Microsoft Visual Studio 11.0\VC\include

这样,我们就不必每次在项目用到时都配置一遍,特别是在Visual Studio2012 貌似不支持全局的头文件配置时(不确定,如果谁找到了可以告诉我一声),这种方式对于经常会建一些小项目的人来说,相对节省时间。

        同样的办法与原因,我们也可以把lib文件夹下的内容拷贝到Visual Studio安装目录下默认的lib寻找路径中,即VC->lib中,例如我将lib文件夹下的x64与x86两个文件直接拷贝到

        E:\Program Files\Microsoft Visual Studio 11.0\VC\lib

的下面。

四、配置动态链接库

       和头文件和静态链接库的配置方式相似,我们这里将dll文件夹的内容放到我们程序能够找到的位置,我们的方案是

把dll下的x64文件夹下的两个文件,即pthreadGC2.dll与pthreadVC2.dll拷贝到C:\Windows\System32下(用于64位程序的运行)

把dll下的x86文件夹下的五个文件,拷贝到C:\Windows\SysWOW64下(用于32位程序的运行),注意一下,千万不能将这些文件拷贝反位置,否则,程序运行时会提示说找不到对应的dll文件。这些在网上的很多文章中都被忽略掉了,所以我们特别提出。

五、运行测试

       完成以上配置之后,我们运行一下测试程序,证明我们的配置完成了

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. //main.cpp  
  2. #include <stdio.h>  
  3. #include <pthread.h>  
  4. #include <assert.h>  
  5.   
  6. #pragma comment(lib,"x86/pthreadVC2.lib")  
  7.   
  8. void* Function_t(void* Param)  
  9. {  
  10.     printf("我是线程! ");  
  11.     pthread_t myid = pthread_self();  
  12.     printf("线程ID=%d ", myid);  
  13.     return NULL;  
  14. }  
  15.   
  16. int main()  
  17. {  
  18.     pthread_t pid;  
  19.     pthread_attr_t attr;  
  20.     pthread_attr_init(&attr);  
  21.     pthread_attr_setscope(&attr, PTHREAD_SCOPE_PROCESS);  
  22.     pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);  
  23.     pthread_create(&pid, &attr, Function_t, NULL);  
  24.     printf("======================================== ");  
  25.     getchar();  
  26.     pthread_attr_destroy(&attr);  
  27.     return 0;  
  28. }  
       这里,我们需要注意的是我们的第6行代码,我们需要在代码中包含入静态链接库(注意,根据不同的编译选项,选择x86还是x64,如果不相配,将无法链接完成)

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. #pragma comment(lib,"x86/pthreadVC2.lib")  
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!