一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

在Windows環(huán)境下的使用pthreads

 ShaneWu 2008-12-15

在Windows環(huán)境下的使用pthreads

       這幾天在研究C++內(nèi)存管理器的多線程版本,其中用到了POSIX的pthread.h。于是我就想測(cè)試一下其中的代碼,但網(wǎng)上查發(fā)現(xiàn)這是Linux環(huán)境 下的庫(kù)。Windows本身沒(méi)有提供對(duì)POSIX的支持。但有一個(gè)叫 POSIX Threads for Win32 的開(kāi)源項(xiàng)目給出了一個(gè)功能比較完善的Windows下pthreads API的實(shí)現(xiàn)。目前的最新版本是Pthreads-w32 release 2.8.0 (2006-12-22)。我的探索過(guò)程就是在使用這個(gè)API的過(guò)程在摸索的,我把過(guò)程都寫(xiě)下來(lái),希望對(duì)以后探索這個(gè)API使用的同學(xué)會(huì)有好處。

        首先去搜索pthread.h的下載很快就會(huì)找到pthreads庫(kù)的下載地址,http:///pthreads-win32/。 ps:校園網(wǎng)的用戶是上不了外國(guó)網(wǎng)站的,我用了個(gè)計(jì)時(shí)的代理,挺便宜的,需要的時(shí)候就連接,下載完了就斷開(kāi),呵呵,用迅雷下載會(huì)快很多哦。我下載了一個(gè)較 新的發(fā)布版本:pthreads-w32-2-8-0-release.exe,這是一個(gè)自解壓文件,我把它解壓在D:\Program Files\pthread\,解壓后會(huì)有文件夾Pre-built.2,這里包含了需要用到的頭文件和鏈接文件。

        之后就寫(xiě)了一個(gè)測(cè)試多線程的代碼,如下:testThread.cpp

#include<pthread.h>
#include<iostream>
using std::cout;
using std::endl;
using std::cin;

class ABClock{
public:
 virtual ~ABClock(){}
 virtual void lock()=0;
 virtual void unlock()=0;
};

class MutexLock:public ABClock{
public:
 MutexLock(){ pthread_mutex_init(&alock,NULL);}
 ~MutexLock(){ pthread_mutex_destroy( &alock);}
 inline void lock(){ pthread_mutex_lock(&alock);}
 inline void unlock(){ pthread_mutex_unlock( &alock);}
private:
 pthread_mutex_t alock;
};

int main()
{
 cout<<"hello"<<endl;
 MutexLock thelock;
 thelock.lock();
 cout<< "locked"<<endl;
 thelock.unlock();
 int a;
 cin>>a;
 return 0;
}
上面代碼就是直接調(diào)用pthreads中的函數(shù)來(lái)實(shí)現(xiàn)線程鎖,但編譯肯定是通不過(guò)的了,提示找不到頭文件pthread.h。

         不了解VC的后果呀,這時(shí)候真想有個(gè)同學(xué)或老師可以輔導(dǎo)我,但是應(yīng)該找不到了,同學(xué)又沒(méi)興趣理這個(gè),老師就更不用說(shuō),而且老師也不一定知道這個(gè)。我只能在百度知道求助了。http://zhidao.baidu.com/question/69168684.html這是這個(gè)貼?;卮鹫f(shuō)在VC里的Tool的Option里增加了頭文件的路徑就行了。試了一下,果然找得到頭文件了,至少編譯通過(guò)了,但連接沒(méi)通過(guò)。但百度知道他的回答也解決了上一個(gè)問(wèn)題,馬上選為最佳答案。

        之后的編譯過(guò)程老是不能成功,問(wèn)題提示連接錯(cuò)誤。VC6.0的錯(cuò)誤提示是這樣的:

--------------------Configuration: testThread - Win32 Debug--------------------
Linking...
testThread.obj : error LNK2001: unresolved external symbol __imp__pthread_mutex_init
testThread.obj : error LNK2001: unresolved external symbol __imp__pthread_mutex_destroy
testThread.obj : error LNK2001: unresolved external symbol __imp__pthread_mutex_lock
testThread.obj : error LNK2001: unresolved external symbol __imp__pthread_mutex_unlock
Debug/testThread.exe : fatal error LNK1120: 4 unresolved externals
Error executing link.exe.

testThread.exe - 5 error(s), 0 warning(s)
我把這些連接錯(cuò)誤提示在Google里搜索,倒也真 的找到了幾個(gè)同樣情況的帖子,都在在國(guó)外的網(wǎng)站來(lái)的,但網(wǎng)頁(yè)里的內(nèi)容是一個(gè)樣的,就是一個(gè)程序?qū)懡o某某的郵件,提到了這個(gè)問(wèn)題,但沒(méi)有解答。在百度里根據(jù) 就是一些沒(méi)用的結(jié)果??磥?lái)沒(méi)辦法了,我這樣的搜索高手都搜不到。暫時(shí)放棄了這個(gè)調(diào)試的過(guò)程。

        但有一個(gè)問(wèn)題疙瘩在心里總不舒服,而且還要研究多線程內(nèi)存池的性能問(wèn)題,又開(kāi)始各種嘗試了。我想使用一個(gè)公布的C API的使用方法都類(lèi)似吧。想到了計(jì)算機(jī)圖形學(xué)里老師教我們使用OpenGL庫(kù)的方法,馬上找老師的課件找出來(lái),這些課件都還保留在電腦里,我的硬盤(pán)大 嘛。

        按使用OpenGL庫(kù)的方法,在VC里安裝OpenGL的過(guò)程就是幾個(gè)復(fù)制過(guò)程,原本內(nèi)容是這樣的:

 GLUT的安裝
 下載glut包,包含5個(gè)文件:glut.h, glut.lib, glut32.lib, glut.dll, glut32.dll
    以VisualStudio 6 為例,(VisualStudio2005等類(lèi)似)
 把glut.h 放到vc安裝文件夾的include文件夾的gl目錄下(若不確定路徑,用查找文件gl.h 搜索,放在與gl.h 相同的文件夾中)
   把glut.lib glut32.lib 放到vc安裝文件夾的lib文件夾中
   把glut.dll glut32.dll  放到windows\system32文件夾內(nèi)

         我用類(lèi)似文件的復(fù)制過(guò)去,感到一陣輕松,這么辛苦的調(diào)試過(guò)程應(yīng)該可以結(jié)束了吧,心里自然高興。用VC6.0打開(kāi)testThread.cpp點(diǎn)編譯,成功,點(diǎn)連接,結(jié)果馬上出現(xiàn)。我又沮喪了。還是同樣的提示連接錯(cuò)誤。這什么問(wèn)題呢。這已經(jīng)接近崩潰...

        每當(dāng)崩潰的時(shí)候我會(huì)想起百度知道,又去問(wèn)題了一個(gè)問(wèn)題,但這個(gè)問(wèn)題太偏,我想找到答案的希望也不大,就是這個(gè)帖子:http://zhidao.baidu.com/question/69334905.html。

        只能等別人回答了,看一下連續(xù)劇吧,減少一下壓力,最近在看少年青天第一部,呵呵,第三部看完了。我還是喜歡這種推理形的連續(xù)劇。之前看完了神探狄仁杰1,2,3部了,嘿。

         又過(guò)了一天,我想憑我的搜索水平,如果在網(wǎng)上有這個(gè)問(wèn)題的解答,我一定能把它搜出來(lái)的,主要是關(guān)鍵詞的選取問(wèn)題而已,當(dāng)然Google才是搜索的主 角。(我在賣(mài)廣告嗎?)之前我都是搜索那些連接錯(cuò)誤的信息。太偏了吧。就改為搜索 "C++ 多線程",根據(jù)結(jié)果慢慢的修改關(guān)鍵詞,改到'C++ 線程", "Windows 線程",竟能把我在百度知道里的提問(wèn)搜出來(lái),看來(lái)百度知道的PageRank還是挺高的嘛。最后搜索"Windows pthread”的時(shí)候奇跡出來(lái)了,Google都被我的執(zhí)著感到了吧。

       終于被我搜到了“Windows下 POSIX 線程編程":http://read./info/179364.html。這遍文件解決了我的問(wèn)題。其中介紹指定link時(shí)要連接的庫(kù)的名稱(chēng)(pthreadVC2.lib),在VC++ 6.0(工程--》設(shè)置--》連接)里的庫(kù)模塊里增加pthreadVC2.lib,連接就通過(guò)了,運(yùn)行出現(xiàn)了可愛(ài)的預(yù)計(jì)結(jié)果:

hello
locked

       那時(shí)已經(jīng)是深夜1點(diǎn)半左右了,非常高興,感到心頭有點(diǎn)放松,我想應(yīng)該睡一覺(jué)舒舒服服的了吧,就睡了。

      我想這個(gè)探索差不多接近尾聲了,但想到VC6.0就有成功了,但在DEV-C++或在其它編譯器里又怎么辦呢。

      在前面的那帖子里順藤摸瓜的找到了候捷的一篇文件,在 console mode 中使用 C/C++ 編譯器:

http://blog.csdn.net/liuyongjin1984/archive/2008/01/07/2029405.aspx。其實(shí)各種編譯器都在以這些配置作為參數(shù)調(diào)用編譯,連接命令而已。如果會(huì)在命令行里的自己編譯了,就應(yīng)該把這個(gè)掌握了。就采用命令行的方式再編譯一次。類(lèi)似于這樣:

》cl.exe main.cpp  /c  /I"c:pthreads-w32-2-7-0-releasePre-built.2include"

》link.exe  /out:main_cl.exe  main.obj  /LIBPATH:"c:pthreads-w32-2-7-0-releasePre-built.2lib"   pthreadVC2.lib

果然能成功編譯連接,探索完畢。

終于寫(xiě)完了,在學(xué)習(xí)的過(guò)程中互聯(lián)網(wǎng)發(fā)揮了極大的作用呀,最重要的就是Google了。追本溯源,其實(shí)佩奇和布林才是我要謝的人啦。這個(gè)探索應(yīng)該告一段落了,我要繼續(xù)探索多線程的問(wèn)題了,特別把這經(jīng)歷寫(xiě)下來(lái),以作記念。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多

    精品亚洲av一区二区三区| 欧美日本道一区二区三区| 福利新区一区二区人口| 久久精品国产在热久久| 欧美日韩国产成人高潮| 91在线播放在线播放观看| 欧洲一区二区三区自拍天堂| 国产亚洲系列91精品| 亚洲高清亚洲欧美一区二区| 我要看日本黄色小视频| 亚洲欧美日韩网友自拍| 精品亚洲av一区二区三区| 国产丝袜美女诱惑一区二区| 亚洲欧美日韩色图七区| 国产亚洲欧美另类久久久| 日本办公室三级在线观看| 欧美黑人在线一区二区| 亚洲精品中文字幕一二三| 91精品欧美综合在ⅹ| 国产精品福利一二三区| 日韩成人动作片在线观看| 欧美在线观看视频三区| 国产精品视频一区二区秋霞 | 四十女人口红哪个色好看| 国产无摭挡又爽又色又刺激 | 好吊色免费在线观看视频| 蜜桃臀欧美日韩国产精品| 欧美一区二区三区99| 日本男人女人干逼视频| 久久精品国产亚洲av麻豆| 色一情一伦一区二区三| 欧美日韩国产的另类视频| 亚洲精品欧美精品日韩精品| 91精品视频全国免费| 精品午夜福利无人区乱码| 日本一区二区三区久久娇喘| 国产精品免费视频视频| 国产成人综合亚洲欧美日韩| 久热人妻中文字幕一区二区| 四季av一区二区播放| 91精品国自产拍老熟女露脸|