本篇文章给大家分享的是有关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线程中类内线程函数的示例分析,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注创新互联行业资讯频道。
分享文章:Boost线程中类内线程函数的示例分析
分享URL:https://www.cdcxhl.com/article44/gojgee.html
成都网站建设公司_创新互联,为您提供面包屑导航、外贸建站、企业网站制作、App设计、网站设计公司、网站设计
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联