Windows的C++沒有pthread_t類型,linux中有個(gè)pthread.h,很多站的VC代碼,都不知道從哪包含來的,shit
網(wǎng)上看到
有一個(gè)叫 POSIX Threads for Win32 的開源項(xiàng)目給出了一個(gè)功能比較完善的Windows下pthreads API的實(shí)現(xiàn)。

我用的2.7.0版的鏈接:ftp://sources.redhat.com/pub/pthreads-win32/pthreads-w32-2-7-0-release.exe

       關(guān)于該開源項(xiàng)目的詳細(xì)介紹見:http://sources.redhat.com/pthreads-win32/

 簡(jiǎn)單使用

       上面的exe文件是一個(gè)自解壓文件,解壓后,Pre-built.2目錄中有編譯所需要的頭文件(include子目錄)和庫(kù)文件(lib子目錄)。

       一個(gè)簡(jiǎn)單的測(cè)試程序(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 的請(qǐng)參考:http://blog.csdn.net/liuyongjin1984/archive/2008/01/07/2029405.aspx 或者參見下面3.2部分):

rem cl.bat

》cl.exe main.cpp  
//I"c:\Pre-built.2\include"

》link.exe 
/out:main_cl.exe  main.obj  /LIBPATH:"c:\Pre-built.2\lib"   pthreadVC2.lib

 使用VC++ 6.0或Visual Studio 2005來運(yùn)行上面的程序

關(guān)鍵有兩點(diǎn):

1. 是將頭文件(include子目錄)和庫(kù)文件(lib子目錄)中的內(nèi)容添加到VC++ 6.0或Visual Studio 2005開發(fā)環(huán)境對(duì)應(yīng)的include和lib目錄下。

具體來說(以添加include目錄為例,添加lib目錄類似):

圖1:VC++ 6.0(添加include目錄:工具--》選項(xiàng)--》目錄)

 

 

圖2:Visual Studio 2005(添加include目錄:tools--》options)

 

 

2. 指定link時(shí)要連接的庫(kù)的名稱(pthreadVC2.lib)

圖3:VC++ 6.0(工程--》設(shè)置--》連接)

圖4:Visual Studio 2005(project-->* property pages)

 

不過最終還是帶一個(gè)pthreadVC2.dll真惡心,搞半天還不如用cygwin