Windows下使用pthread庫(GCC CL編譯器都可以使用)

來源:互聯網
上載者:User

只有還沒做出來的,沒有想不到的。

從linux移植到windows的C++程式,肯定要改造下 socket和線程庫。

某日,突然想到 windows 可以使用pthread庫嗎?搜尋,果然有線程的解決方案。

1.下載:http://sourceware.org/pthreads-win32/#download

直接下載最新的就行,目前是: prebuilt-dll-2-9-1-release.zip  因為是windows平台的,所以下載 .zip 或。exe就行,.exe 就是自解壓而已,別無其他。最新版本 沒有.exe的下載版本了,其內容和zip的一樣。但是 zip和 tar.gz tar.bz2的 不太一樣。zip比較全,包括了 已經編譯好的二進位Pre-built.2,源碼pthreads.2,還有一個3.QueueUserAPCEx 不知道到底幹什麼用的,是一個alert的driver,編譯 需要 DDK ,預設vs2010 沒有安裝。Windows Device Driver Kit NTDDK.h 需要額外單獨安裝。

2.安裝這些開發庫到你的環境中,包括 lib 到vs的lib檔案夾,dll到path目錄中,include到vs的include檔案夾中。這樣比較方便麼。

寫兩個個指令碼 容易實現的:

rem put this file to :D:\#win pthread\pthreads-w32-2-9-1-release\Pre-built.2copy include\pthread.h "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\"pthread.hcopy include\sched.h "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\"sched.hcopy include\semaphore.h "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\"semaphore.hcopy dll\x86\pthreadVC2.dll %windir%\pthreadVC2.dllcopy dll\x86\pthreadVCE2.dll %windir%\pthreadVCE2.dllcopy dll\x86\pthreadVSE2.dll %windir%\pthreadVSE2.dllcopy 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.2del /f /a /q "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\"pthread.hdel /f /a /q "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\"sched.hdel /f /a /q "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\"semaphore.hdel /f /a /q  %windir%\pthreadVC2.dlldel /f /a /q  %windir%\pthreadVCE2.dlldel /f /a /q  %windir%\pthreadVSE2.dlldel /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

以上 路徑 可能不一樣,請自行更正。

3.測試 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" x86rem 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.libtestWPThread.exedel /f *.exedel /f *.objcmd

連結 lib庫 ,在cl.exe編譯器下 可以通過  #pragma comment(lib, "pthreadVC2.lib") 或者 加入 到cl.exe 的參數中去 都可以。

如何編譯 windows pthread庫,以及 如何更改成 靜態連結庫,請聽下回分解。

 

參考連結:

http://blog.csdn.net/michaelsrc/article/details/6665493

http://ah-fu.iteye.com/blog/281644

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.