您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關Boost線程中類內線程函數的示例分析,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
代碼
#include <string>
#include <boost/thread/thread.hpp>
#include <boost/bind.hpp>
#include <boost/function/function0.hpp>
class CThreadClass
{
public:
CThreadClass()
{
m_stop = true;
}
void StartThread()
{
boost::function0<void> f = boost::bind(&CThreadClass::ThreadFunc, this);
boost::thread thrd(f);
}
void ThreadFunc()
{
std::cout << m_stop << std::endl;
}
private:
bool m_stop;
};
void ThreadTest()
{
CThreadClass helper;
helper.StartThread();
}
int main()
{
ThreadTest();
::Sleep(1000);
return 0;
}
在上面的例子中,在類的構造函數中,初始化m_stop為true,但是在線程函數中訪問的時候,m_stop卻是為false,并且根據引用,
只有構造函數對m_stop進行了初始化操作
原因
ThreadTest函數實例化CThreadClass,創建線程,當ThreadTest調用結束的時候,helper實例就會由于生命周期結束,
而在棧中被銷毀,這個時候,m_stop的值就是未知的,有的時候如果寄存器中的值沒有被清空,或者置位,程序正常運行
上述代碼來自于項目中的不成熟的使用方案,通過該方法來創建一個監聽服務,切記!!
優雅
#include <boost/thread/thread.hpp>
#include <boost/bind.hpp>
#include <boost/function/function0.hpp>
class CThreadClass
{
public:
CThreadClass()
{
m_stop = false;
}
void StartThread()
{
m_thread.reset(new boost::thread(boost::bind(&CThreadClass::ThreadFunc, this)));
}
void StopThread()
{
m_stop = true;
m_thread->join();
}
void ThreadFunc()
{
while (!m_stop)
{
std::cout << "thread is running" << std::endl;
::Sleep(100);
}
}
private:
bool m_stop;
boost::shared_ptr<boost::thread> m_thread;
};
CThreadClass* pHelper = NULL;
void StartListen()
{
pHelper = new CThreadClass();
pHelper->StartThread();
}
void StopListen()
{
if (NULL == pHelper) return;
delete pHelper;
pHelper = NULL;
}
int main()
{
StartListen();
::Sleep(1000);
StopListen();
return 0;
}
注意:reset前面是.,而join前面是->,目前沒有明白
以上就是Boost線程中類內線程函數的示例分析,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。