BOOST THREAD 想要靜態連結也會有問題?

今天要討論的是 "BOOST THREAD 函式庫的基本使用"
同樣地,我們需要的材料有:
  1. 一份雞排加辣
  2. 一份珍奶半糖去冰
  3. 一個預先編譯好的 boost thread 函式庫

有了上面第三個材料,我們就能開始摟!(前兩個是怎樣?)



首先我們先設定一下,函式庫的路徑以及需要連結的函式庫檔案,這邊我選擇靜態連結的 thread  函式庫。當然,你也可以選擇動態連接版本的函式庫,如果你選擇動態連結的函式庫的話,記得把相關的 dll 檔案複製到你執行檔案的資料夾底下。


再設定完這些之後,我們就可以開始寫 thread 程式啦!這個真的簡單到噴汁 (珍奶啊) ,看看下面的程式碼你就知道啦!


建立一個 thread物件與啟動一個 thread 的作法如下

thread 物件名稱 (可被呼叫的物件);

假設我們要建立一個名為 t1 的 thread 物件,並且啟動他來呼叫 msgfunc1 可以這樣作:

thread t1 (&msgfunc1);

t1 被建立時,就會去呼叫 msgfunc1。現在,讓我們多建幾個 thread 來看看效果吧!分別建立四個 thread 物件 t1 t4 ,這四個物件分別啟動 msgfunc1 ~ msgfunc4,詳細程式碼如上圖所示。你可以看看每次的輸出都不太一樣歐!



等等!你說你在編譯靜態連結版本時會有問題,然後錯誤訊息又跟下面這串很像:


:\projects\thread_util\Debug/../src/thread_util.cpp:39: undefined reference to `_imp___ZN5boost6thread4joinEv'
C:\projects\thread_util\Debug/../src/thread_util.cpp:40: undefined reference to `_imp___ZN5boost6thread4joinEv'
C:\projects\thread_util\Debug/../src/thread_util.cpp:41: undefined reference to `_imp___ZN5boost6thread4joinEv'
C:\projects\thread_util\Debug/../src/thread_util.cpp:42: undefined reference to `_imp___ZN5boost6thread4joinEv'
C:\projects\thread_util\Debug/../src/thread_util.cpp:38: undefined reference to `_imp___ZN5boost6threadD1Ev'
C:\projects\thread_util\Debug/../src/thread_util.cpp:37: undefined reference to `_imp___ZN5boost6threadD1Ev'

 那你可以使用這招,加上 "BOOST_THREAD_USE_LIB" 符號即可。參考下圖,你會發現是這招超簡單的啦!

留言

這個網誌中的熱門文章

XBOX 360 無線手把 控制器 簡易維修

建立 boost 的時間要好久啊!