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. 编写测试程序
和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 的参数中去 都可以。