本文来讨论一下用函数对象来构造线程对象的问题。
首先什么是函数对象,function object.
调用重载操作符()的类,其对象常称为函数对象(function object),即它们是行为类似函数的对象
#include <boost/thread/thread.hpp>
#include <iostream>
using namespace std;
using namespace boost;
/**
* @brief Method 2: Use the funtion object construct thread object.
*/
class FuncObject
{
public:
FuncObject(int arg):m_arg(arg)
{
cout<<"Construct."<<endl;
};
FuncObject(FuncObject &the)
{
this->m_arg = the.m_arg;
cout<<"Copy construct."<<endl;
}
~FuncObject()
{
cout<<"Disconstruct"<<endl;
}
void operator()()
{
//这里将是线程的运行体...
}
int GetArg()
{
return m_arg;
}
private:
int m_arg;
};
int main()
{
int b = 10;
FuncObject a(b);
thread th(a); ///< Waring: The object will be copied. Oh, It has 4 times !
th.join(); ///< waiting for the thread over.
return 0;
}
在vs2008运行的结果:
构造函数调用一次,拷贝函数调用了四次, 析构函数调用了五次.
这时我作的拷贝函数要轻量级,才能体现出boost::thread效率.