在windows下配置pthread多線程

        Pthread是由POSIX提出的一套通用的線程庫,在linux平臺下,它被廣泛的支持,而windows平臺下,卻並不被支持,而pthreads-w32爲我們提供瞭解決方案,本文我們準備在我們的windows平臺下進行pthread-w32的安裝,在網絡上有類似的文章,但是講的都是比較老的平臺,在windows8下支持並不全面,不過可以作爲參考。我們在這裏貼出幾個網址,供參考使用。

       Windows 7 64bit和Visual Studio 2010下安裝及使用Pthread-w32 2.8 

       windows下使用pthread庫(轉)

        如果你的是XP系統或者win7 32位系統,那麼,那兩篇文章已經足以你完成pthread-w32的安裝了。現在,我們開始講我們的嘗試過程。

一、安裝平臺

        windows8 64位系統,Microsoft Visual Studio 2012

二、pthreads-w32 下載地址

        我們這裏下載最新版本pthreads-w32-2-9-1

        ftp://sourceware.org/pub/pthreads-win32/pthreads-w32-2-9-1-release.zip

        下載後解壓,可以看到共有三個文件夾

       

        我們用到的主要是“Pre-built.2”這個文件夾下的三個文件夾,分別是動態鏈接庫、頭文件、靜態鏈接庫

         

三、配置頭文件及靜態鏈接庫

        這裏有多種方式,我們這裏只提到我們用到的一種,總之目的是讓我們建立的工程能夠找到對應的頭文件、靜態庫文件,以及運行時程序能夠找到動態鏈接庫文件。

這裏,我們直接把頭文件拷貝到Visual Studio的默認路徑的頭文件中,即把include文件夾中的三個文件直接拷貝到Visual Studio安裝目錄下VC->include文件夾下,例如我將include中文件拷貝到的位置是

E:\Program Files\Microsoft Visual Studio 11.0\VC\include

這樣,我們就不必每次在項目用到時都配置一遍,特別是在Visual Studio2012 貌似不支持全局的頭文件配置時(不確定,如果誰找到了可以告訴我一聲),這種方式對於經常會建一些小項目的人來說,相對節省時間。

        同樣的辦法與原因,我們也可以把lib文件夾下的內容拷貝到Visual Studio安裝目錄下默認的lib尋找路徑中,即VC->lib中,例如我將lib文件夾下的x64與x86兩個文件直接拷貝到

        E:\Program Files\Microsoft Visual Studio 11.0\VC\lib

的下面。

四、配置動態鏈接庫

       和頭文件和靜態鏈接庫的配置方式相似,我們這裏將dll文件夾的內容放到我們程序能夠找到的位置,我們的方案是

把dll下的x64文件夾下的兩個文件,即pthreadGC2.dll與pthreadVC2.dll拷貝到C:\Windows\System32下(用於64位程序的運行)

把dll下的x86文件夾下的五個文件,拷貝到C:\Windows\SysWOW64下(用於32位程序的運行),注意一下,千萬不能將這些文件拷貝反位置,否則,程序運行時會提示說找不到對應的dll文件。這些在網上的很多文章中都被忽略掉了,所以我們特別提出。

五、運行測試

       完成以上配置之後,我們運行一下測試程序,證明我們的配置完成了

  1. //main.cpp
  2. #include <stdio.h>
  3. #include <pthread.h>
  4. #include <assert.h>
  5. #pragma comment(lib,"x86/pthreadVC2.lib")
  6. void* Function_t(void* Param)
  7. {
  8. printf("我是線程! ");
  9. pthread_t myid = pthread_self();
  10. printf("線程ID=%d ", myid);
  11. return NULL;
  12. }
  13. int main()
  14. {
  15. pthread_t pid;
  16. pthread_attr_t attr;
  17. pthread_attr_init(&attr);
  18. pthread_attr_setscope(&attr, PTHREAD_SCOPE_PROCESS);
  19. pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
  20. pthread_create(&pid, &attr, Function_t, NULL);
  21. printf("======================================== ");
  22. getchar();
  23. pthread_attr_destroy(&attr);
  24. return 0;
  25. }
       這裏,我們需要注意的是我們的第6行代碼,我們需要在代碼中包含入靜態鏈接庫(注意,根據不同的編譯選項,選擇x86還是x64,如果不相配,將無法鏈接完成)

#pragma comment(lib,"x86/pthreadVC2.lib")




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章