在windows下配置pthread多线程
??????? Pthread是由POSIX提出的一套通用的線程庫,在linux平臺(tái)下,它被廣泛的支持,而windows平臺(tái)下,卻并不被支持,而pthreads-w32為我們提供了解決方案,本文我們準(zhǔn)備在我們的windows平臺(tái)下進(jìn)行pthread-w32的安裝,在網(wǎng)絡(luò)上有類似的文章,但是講的都是比較老的平臺(tái),在windows8下支持并不全面,不過可以作為參考。我們?cè)谶@里貼出幾個(gè)網(wǎng)址,供參考使用。
???????Windows 7 64bit和Visual Studio 2010下安裝及使用Pthread-w32 2.8?
???????windows下使用pthread庫(轉(zhuǎn))
??????? 如果你的是XP系統(tǒng)或者win7 32位系統(tǒng),那么,那兩篇文章已經(jīng)足以你完成pthread-w32的安裝了。現(xiàn)在,我們開始講我們的嘗試過程。
一、安裝平臺(tái)
??????? windows8 64位系統(tǒng),Microsoft Visual Studio 2012
二、pthreads-w32 下載地址
??????? 我們這里下載最新版本pthreads-w32-2-9-1
??????? ftp://sourceware.org/pub/pthreads-win32/pthreads-w32-2-9-1-release.zip
??????? 下載后解壓,可以看到共有三個(gè)文件夾
????? ?
??????? 我們用到的主要是“Pre-built.2”這個(gè)文件夾下的三個(gè)文件夾,分別是動(dòng)態(tài)鏈接庫、頭文件、靜態(tài)鏈接庫
?????? ??
三、配置頭文件及靜態(tài)鏈接庫
??????? 這里有多種方式,我們這里只提到我們用到的一種,總之目的是讓我們建立的工程能夠找到對(duì)應(yīng)的頭文件、靜態(tài)庫文件,以及運(yùn)行時(shí)程序能夠找到動(dòng)態(tài)鏈接庫文件。
這里,我們直接把頭文件拷貝到Visual Studio的默認(rèn)路徑的頭文件中,即把include文件夾中的三個(gè)文件直接拷貝到Visual Studio安裝目錄下VC->include文件夾下,例如我將include中文件拷貝到的位置是
E:\Program Files\Microsoft Visual Studio 11.0\VC\include
這樣,我們就不必每次在項(xiàng)目用到時(shí)都配置一遍,特別是在Visual Studio2012 貌似不支持全局的頭文件配置時(shí)(不確定,如果誰找到了可以告訴我一聲),這種方式對(duì)于經(jīng)常會(huì)建一些小項(xiàng)目的人來說,相對(duì)節(jié)省時(shí)間。
??????? 同樣的辦法與原因,我們也可以把lib文件夾下的內(nèi)容拷貝到Visual Studio安裝目錄下默認(rèn)的lib尋找路徑中,即VC->lib中,例如我將lib文件夾下的x64與x86兩個(gè)文件直接拷貝到
??????? E:\Program Files\Microsoft Visual Studio 11.0\VC\lib
的下面。
四、配置動(dòng)態(tài)鏈接庫
?????? 和頭文件和靜態(tài)鏈接庫的配置方式相似,我們這里將dll文件夾的內(nèi)容放到我們程序能夠找到的位置,我們的方案是
把dll下的x64文件夾下的兩個(gè)文件,即pthreadGC2.dll與pthreadVC2.dll拷貝到C:\Windows\System32下(用于64位程序的運(yùn)行)
把dll下的x86文件夾下的五個(gè)文件,拷貝到C:\Windows\SysWOW64下(用于32位程序的運(yùn)行),注意一下,千萬不能將這些文件拷貝反位置,否則,程序運(yùn)行時(shí)會(huì)提示說找不到對(duì)應(yīng)的dll文件。這些在網(wǎng)上的很多文章中都被忽略掉了,所以我們特別提出。
五、運(yùn)行測(cè)試
?????? 完成以上配置之后,我們運(yùn)行一下測(cè)試程序,證明我們的配置完成了
- //main.cpp
- #include <stdio.h>
- #include <pthread.h>
- #include <assert.h>
-
- #pragma comment(lib,"x86/pthreadVC2.lib")
-
- void* Function_t(void* Param)
- {
- printf("我是線程! ");
- pthread_t myid = pthread_self();
- printf("線程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 0;
- }
?????? 這里,我們需要注意的是我們的第6行代碼,我們需要在代碼中包含入靜態(tài)鏈接庫(注意,根據(jù)不同的編譯選項(xiàng),選擇x86還是x64,如果不相配,將無法鏈接完成)
#pragma comment(lib,"x86/pthreadVC2.lib")
總結(jié)
以上是生活随笔為你收集整理的在windows下配置pthread多线程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: memset()函数用法及其作用
- 下一篇: tftp:timeout问题解决 - 从