Windows的C++沒有pthread_t類型,linux中有個
pthread.h,很多站的VC代碼,都不知道從哪包含來的,shit
網上看到有一個叫
POSIX Threads for Win32 的開源項目給出了一個功能比較完善的Windows下pthreads API的實現。
我用的2.7.0版的鏈接:
ftp://sources.redhat.com/pub/pthreads-win32/pthreads-w32-2-7-0-release.exe。
關于該開源項目的詳細介紹見:http://sources.redhat.com/pthreads-win32/。
簡單使用
上面的exe文件是一個自解壓文件,解壓后,Pre-built.2目錄中有編譯所需要的頭文件(include子目錄)和庫文件(lib子目錄)。
一個簡單的測試程序(main.cpp):
#include <stdio.h>
#include <pthread.h>
#include <assert.h>

void* Function_t(void* Param)

...{
printf("I am a thread! ");
pthread_t myid = pthread_self();
printf("thread ID=%d ", myid);
return NULL;
}

int main()

...{
pthread_t pid;
pthread_attr_t attr;
pthread_attr_init(&attr);
pthread_attr_setscope(&attr, PTHREAD_SCOPE_PROCESS);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
pthread_create(&pid, &attr, Function_t, NULL);
printf("======================================== ");
getchar();
pthread_attr_destroy(&attr);
return 1;
}
使用 cl.exe 編譯(不熟悉 cl.exe 的請參考:http://blog.csdn.net/liuyongjin1984/archive/2008/01/07/2029405.aspx 或者參見下面3.2部分):
使用VC++ 6.0或Visual Studio 2005來運行上面的程序
關鍵有兩點:
1. 是將頭文件(include子目錄)和庫文件(lib子目錄)中的內容添加到VC++ 6.0或Visual Studio 2005開發環境對應的include和lib目錄下。
具體來說(以添加include目錄為例,添加lib目錄類似):
圖1:VC++ 6.0(添加include目錄:工具--》選項--》目錄)
圖2:Visual Studio 2005(添加include目錄:tools--》options)
2. 指定link時要連接的庫的名稱(pthreadVC2.lib)
圖3:VC++ 6.0(工程--》設置--》連接)

圖4:Visual Studio 2005(project-->* property pages)
不過最終還是帶一個
pthreadVC2.dll真惡心,搞半天還不如用cygwin