您的位置:首页 > 其它

boost::thread 使用函数对象来构造线程对象的问题

2012-12-16 14:52 309 查看
本文来讨论一下用函数对象来构造线程对象的问题。

首先什么是函数对象,functionobject.

调用重载操作符()的类,其对象常称为函数对象(functionobject),即它们是行为类似函数的对象

#include<boost/thread/thread.hpp>
#include<iostream>
usingnamespacestd;
usingnamespaceboost;

/**
*@briefMethod2:Usethefuntionobjectconstructthreadobject.
*/

classFuncObject
{
public:
FuncObject(intarg):m_arg(arg)
{
cout<<"Construct."<<endl;
};

FuncObject(FuncObject&the)
{
this->m_arg=the.m_arg;
cout<<"Copyconstruct."<<endl;
}

~FuncObject()
{
cout<<"Disconstruct"<<endl;
}

voidoperator()()
{
//这里将是线程的运行体...
}

intGetArg()
{
returnm_arg;
}

private:

intm_arg;
};

intmain()
{
intb=10;
FuncObjecta(b);

threadth(a);///<Waring:Theobjectwillbecopied.Oh,Ithas4times!

th.join();///<waitingforthethreadover.

return0;
}
在vs2008运行的结果:


构造函数调用一次,拷贝函数调用了四次,析构函数调用了五次.
这时我作的拷贝函数要轻量级,才能体现出boost::thread效率.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐