在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> class ABClock{ class MutexLock:public ABClock{ int main() 不了解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-------------------- testThread.exe - 5 error(s), 0 warning(s) 但有一個(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)容是這樣的:
我用類(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 那時(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),以作記念。 |
|