Windows下使用pthread

1.下载pthreads-w32-2-8-0-release.exe

下载地址:ftp://sourceware.org/pub/pthreads-win32


2. 安装pthreads-w32-2-8-0-release.exe

       双击pthreads-w32-2-8-0-release.exe,点击Browse选择安装到的目录,然后点击Extract解压,完成后点击Done。

       之后会在安装目录看到有三个文件夹Pre-built.2、pthreads.2、QueueUserAPCEx.

第一个是生成库(头文件和库文件那些),第二个是源码,第三个不清楚,像是测试程序。

       将Pre-built.2文件夹下的include和lib文件夹里的文件复制到VS2008对应的include和lib目录,我这里是C:\Program Files\Microsoft Visual Studio 9.0\VC\include和C:\Program Files\Microsoft VisualStudio 9.0\VC\lib.

 

3. 编写测试程序

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. #include<stdio.h>  
  2. #include<pthread.h>  
  3. #include<Windows.h>  
  4. #pragma comment(lib, "pthreadVC2.lib")  //必须加上这句  
  5.    
  6. void*Function_t(void* Param)  
  7. {  
  8.      pthread_t myid = pthread_self();  
  9.      while(1)  
  10.      {  
  11.          printf("线程ID=%d \n", myid);  
  12.          Sleep(4000);  
  13.      }  
  14.      return NULL;  
  15. }  
  16.    
  17. int main()  
  18. {  
  19.      pthread_t pid;  
  20.      pthread_create(&pid, NULL, Function_t,NULL);  
  21.      while (1)  
  22.      {  
  23.          printf("in fatherprocess!\n");  
  24.          Sleep(2000);  
  25.      }  
  26.      getchar();  
  27.      return 1;  
  28. }  


       和Linux的pthread一样~直接编译运行就ok了。如果运行提示缺少pthreadVC2.dll,就将Pre-built.2\lib目录下的pthreadVC2.dll拷贝到可执行文件所在目录就行了。

写两个个脚本 容易实现的:

复制代码
rem put this file to :D:\#win pthread\pthreads-w32-2-9-1-release\Pre-built.2


copy include\pthread.h "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\"pthread.h
copy include\sched.h "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\"sched.h
copy include\semaphore.h "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\"semaphore.h

copy dll\x86\pthreadVC2.dll %windir%\pthreadVC2.dll
copy dll\x86\pthreadVCE2.dll %windir%\pthreadVCE2.dll
copy dll\x86\pthreadVSE2.dll %windir%\pthreadVSE2.dll

copy lib\x86\pthreadVC2.lib "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib\"pthreadVC2.lib 
copy lib\x86\pthreadVCE2.lib "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib\"pthreadVCE2.lib 
copy lib\x86\pthreadVSE2.lib "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib\"pthreadVSE2.lib 


ping -n 2 127.1>nul
复制代码
复制代码
rem put this file to :D:\#win pthread\pthreads-w32-2-9-1-release\Pre-built.2


del /f /a /q "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\"pthread.h
del /f /a /q "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\"sched.h
del /f /a /q "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\"semaphore.h

del /f /a /q  %windir%\pthreadVC2.dll
del /f /a /q  %windir%\pthreadVCE2.dll
del /f /a /q  %windir%\pthreadVSE2.dll

del /f /a /q "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib\"pthreadVC2.lib 
del /f /a /q "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib\"pthreadVCE2.lib 
del /f /a /q "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib\"pthreadVSE2.lib 


ping -n 2 127.1>nul
复制代码

以上 路径 可能不一样,请自行更正。

测试 windows下的pthread库

复制代码
#include<stdio.h>
#include<pthread.h>
#include<Windows.h>
#pragma comment(lib, "pthreadVC2.lib")  //必须加上这句
 
void*Function_t(void* Param)
{
     pthread_t myid = pthread_self();
     while(1)
     {
         printf("线程ID=%d \n", myid);
         Sleep(4000);
     }
     return NULL;
}
 
int main()
{
     pthread_t pid;
     pthread_create(&pid, NULL, Function_t,NULL);
     while (1)
     {
         printf("in fatherprocess!\n");
         Sleep(2000);
     }
     getchar();
     return 1;
}
复制代码

这个是直接copy网友的,例子不是特别的好,仅仅使用到了pthread_create.

包括了 windows.h 和pthread.h 头文件。

由于其是使用 DLL 方式链接 pthread库的,所以,dll需要到path路径中去,放到 可执行文件目录也行。至于能否 直接静态链接 到可执行文件,我想 应该 特别容易了,自己编译下 windows pthread库就可以了。

编译 这个 测试文件 我也写个 批处理,以后 直接看到批处理,就什么都明白了。

复制代码
rem 0.=========初始化 VS环境
call "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" x86

rem 1.=========
rem 源文件中添加 #pragma comment(lib, "pthreadVC2.lib")
cl.exe testWPthread.cpp  

rem 2.=========
rem cl.exe testWPthread.cpp  /c /I"c:\pthreads-w32-2-7-0-release\Pre-built.2\include"
rem link.exe testWPthread.obj /LIBPATH:"c:\pthreads-w32-2-7-0-release\Pre-built.2\lib" pthreadVC2.lib


testWPThread.exe

del /f *.exe
del /f *.obj

cmd
复制代码

链接 lib库 ,在cl.exe编译器下 可以通过  #pragma comment(lib, "pthreadVC2.lib") 或者 加入 到cl.exe 的参数中去 都可以。


  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值