一、C++11多執行緒std::thread的簡單使用(上)
阿新 • • 發佈:2019-01-27
出處: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>
- bool HelloWorld::init()
- {
- if ( !Layer::init() )
- {
- returnfalse;
- }
- std::thread t1(&HelloWorld::myThread,this);//建立一個分支執行緒,回撥到myThread函式裡
- t1.join();
- // t1.detach();
- CCLOG("in major thread");//在主執行緒
- returntrue;
- }
- void HelloWorld::myThread()
- {
-
CCLOG("in my thread"
- }
t.join()等待子執行緒myThread執行完之後,主執行緒才可以繼續執行下去,此時主執行緒會釋放掉執行完後的子執行緒資源。從上面的圖片也可以看出,是先輸出"in my thread",再輸出"in major thread"。
當然了,如果不想等待子執行緒,可以在主執行緒裡面執行t1.detach()將子執行緒從主執行緒裡分離,子執行緒執行完成後會自己釋放掉資源。分離後的執行緒,主執行緒將對它沒有控制權了。如下:
- std::thread t1(&HelloWorld::myThread,this);//建立一個分支執行緒,回撥到myThread函式裡
- t1.detach();
當然了,也可以往執行緒函式裡穿引數,這裡用到了bind。下面例子在例項化執行緒物件的時候,線上程函式myThread後面緊接著傳入兩個引數。
- bool HelloWorld::init()
- {
- if ( !Layer::init() )
- {
- returnfalse;
- }
- std::thread t1(&HelloWorld::myThread,this,10,20);//建立一個分支執行緒,回撥到myThread函式裡
- t1.join();
- // t1.detach();
- CCLOG("in major thread");//在主執行緒
- returntrue;
- }
- void HelloWorld::myThread(int first,int second)
- {
- CCLOG("in my thread,first = %d,second = %d",first,second);
- }
恩,這篇先講到這裡吧。下篇講下互斥量,最後以一個抄襲的例子瀟灑的結束掉執行緒的一生
尊重原創,轉載請註明來源: