boost库在工作(20)线程之五
生活随笔
收集整理的這篇文章主要介紹了
boost库在工作(20)线程之五
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
通過上面的學習,基本上就可以使用線程了,但怎么樣讓線程運行類里的成員函數呢?以便封裝得更方便使用了。接著下來,就看這個例子,如下:
// boost_013.cpp : Defines the entry point for the console application. //#include "stdafx.h" #include <boost/thread.hpp> #include <boost/bind.hpp> #include <boost/thread/mutex.hpp>//封裝線程組運行的類, 并且演示使用類成員函數作為線程組運行函數 //軟件開發人員: 蔡軍生 2013-04-05 //QQ: 9073204 class CThreadBase { public:void Start(int nMaxCount){ //循環地創建N個線程。for (int i = 0; i < nMaxCount; ++i){m_threadGroup.create_thread(boost::bind(&CThreadBase::Run, this, i));}}void Stop(void){//等所有線程退出。m_threadGroup.join_all();}virtual void Run(int nVal){//int nTemp = nVal * nVal;//下面輸出需要加鎖,不能多個線程共享輸出。static boost::mutex mutexCout;boost::lock_guard<boost::mutex> autoLock(mutexCout);std::cout << "thread Run: [" << nVal << "] " << nTemp << std::endl;} private://定義一個線程組對象。boost::thread_group m_threadGroup; };int _tmain(int argc, _TCHAR* argv[]) {CThreadBase threadBase;//設置最大的線程個數。threadBase.Start(5);threadBase.Stop();system("PAUSE");return 0; }?
在這個例子里封裝了一個類CThreadBase,這個類可以表示一個線程運行, 也可以多個線程運行,并且可以讓線程運行類里的成員函數,這樣更加方便添加代碼和管理代碼了。在這個例子里,要注意的就是bind器的使用,如下:
m_threadGroup.create_thread(boost::bind(&CThreadBase::Run, this,i));
首先獲取成員函數的指針,然后再傳送this指針過去,然后就可以調用類實例化的成員函數了。
轉載于:https://www.cnblogs.com/jiangu66/archive/2013/04/22/3035914.html
總結
以上是生活随笔為你收集整理的boost库在工作(20)线程之五的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【陷阱】交换排序中交换动作的陷阱
- 下一篇: 【iBoard 电子学堂 / iCore