1. 程式人生 > >一、C++11多執行緒std::thread的簡單使用(上)

一、C++11多執行緒std::thread的簡單使用(上)

出處:http://blog.csdn.net/star530/article/details/24186783

昨天練車時有一MM與我交替著練,聊了幾句話就多了起來,我對她說:”看到前面那倆教練沒?老色鬼兩枚!整天調戲女學員。“她說:”還好啦,這畢竟是他們的樂趣所在,你不覺得教練每天都教學員是很枯燥的一件事麼?所以調戲學員是他們每天的樂趣,這樣工作才更有動力“。我承認聽完她的話我愣住了!
事後一夜沒睡,總結出了兩點
1、看待問題一定要從多個角度分析,別太主觀,我覺得他們是色鬼,難免會有嫉妒的因素在裡面(當然了,這個可能性幾乎為0,像我這種風一般的男紙,會嫉妒他們?)。
2、程式設計師的工作日常別總是單一的敲程式碼,那太枯燥了,即使興趣所在時間久了也會心裡疲憊!那該怎麼做呢?學學教練吧,

看到女同事了嗎?沒錯,過去調戲她!!!君子動口不動手,碼農動手不動口~~~哇咔咔~~~

---------------
本篇介紹的是執行緒!
在cocos2dx 2.0時代,我們使用的是pthread庫,是一套使用者級執行緒庫,被廣泛地使用在跨平臺應用上。但在cocos2dx 3.0中並未發現有pthread的支援檔案,原來c++11中已經擁有了一個更好用的用於執行緒操作的類std::thread。cocos2dx 3.0的版本預設是在vs2012版本,支援c++11的新特性,使用std::thread來建立執行緒簡直方便。

下面介紹下std::thread的一下簡單用法,程式碼需包含標頭檔案<thread>

  1. bool HelloWorld::init()  
  2. {  
  3.     if ( !Layer::init() )  
  4.     {  
  5.         returnfalse;  
  6.     }  
  7.     std::thread t1(&HelloWorld::myThread,this);//建立一個分支執行緒,回撥到myThread函式裡
  8.     t1.join();  
  9. //  t1.detach();
  10.     CCLOG("in major thread");//在主執行緒
  11.     returntrue;  
  12. }  
  13. void HelloWorld::myThread()  
  14. {  
  15.     CCLOG("in my thread"
    );  
  16. }  
執行結果如下圖:

t.join()等待子執行緒myThread執行完之後,主執行緒才可以繼續執行下去,此時主執行緒會釋放掉執行完後的子執行緒資源。從上面的圖片也可以看出,是先輸出"in my thread",再輸出"in major thread"。
當然了,如果不想等待子執行緒,可以在主執行緒裡面執行t1.detach()將子執行緒從主執行緒裡分離,子執行緒執行完成後會自己釋放掉資源。分離後的執行緒,主執行緒將對它沒有控制權了。如下:
  1. std::thread t1(&HelloWorld::myThread,this);//建立一個分支執行緒,回撥到myThread函式裡
  2. t1.detach();  
執行結果如下:


當然了,也可以往執行緒函式裡穿引數,這裡用到了bind。下面例子在例項化執行緒物件的時候,線上程函式myThread後面緊接著傳入兩個引數。
  1. bool HelloWorld::init()  
  2. {  
  3.     if ( !Layer::init() )  
  4.     {  
  5.         returnfalse;  
  6.     }  
  7.     std::thread t1(&HelloWorld::myThread,this,10,20);//建立一個分支執行緒,回撥到myThread函式裡
  8.     t1.join();  
  9. //  t1.detach();
  10.     CCLOG("in major thread");//在主執行緒
  11.     returntrue;  
  12. }  
  13. void HelloWorld::myThread(int first,int second)  
  14. {  
  15.     CCLOG("in my thread,first = %d,second = %d",first,second);  
  16. }  
輸出結果如下圖:


恩,這篇先講到這裡吧。下篇講下互斥量,最後以一個抄襲的例子瀟灑的結束掉執行緒的一生

尊重原創,轉載請註明來源: