【发布时间】:2012-02-29 16:35:52
【问题描述】:
我正在尝试创建一个启动其成员方法之一的线程实例的类。 当我做主时:
test myinstance;
std::thread mythread(myinstance);
然后事情编译。但使用以下构造:
#include <stdio.h>
#include <unistd.h>
#include <thread>
class test
{
std::thread *pt;
public:
test()
{
pt = new std::thread(this);
}
void operator()() const
{
printf("thread start\n");
sleep(5);
printf("thread end\n");
}
};
int main(int arg, char *argv[])
{
test ptest;
sleep(10);
return 0;
}
我收到以下错误:
folkert@here:~$ g++ -std=c++0x test.cpp 在包含的文件中 /usr/include/c++/4.6/thread:39:0, 来自 test.cpp:3: /usr/include/c++/4.6/functional: 在成员函数 'void std::_Bind_result<_result _functor ...>::__call(std::tuple<_args ...>&&, std::_Index_tuple<_indexes ...>,类型名 std::_Bind_result<_result ...>::__enable_if_void<_res>::type) [with _Res = void, _Args = {}, int ..._Indexes = {},_Result = void,_Functor = test*,_Bound_args = {},类型名 std::_Bind_result<_result _functor ...>::__enable_if_void<_res>::type = int]': /usr/include/c++/4.6/functional:1378:24: 实例化自 'std::_Bind_result<_result _functor ...>::result_type std::_Bind_result<_result _functor ...>::operator()(_Args&& ...) [with _Args = {}, _Result = void, _Functor = test*, _Bound_args = {}, std::_Bind_result<_result _functor ...>::result_type = void]' /usr/include/c++/4.6/thread:117:13: 从 ' 实例化空白 std::thread::_Impl<_callable>::_M_run() [with _Callable = std::_Bind_result]' test.cpp:28:1: 实例化自 这里 /usr/include/c++/4.6/functional:1287:4: 错误: '((std::_Bind_result*)this)->std::_Bind_result::_M_f' 不能作为函数使用
所以我的猜测是它不会这样工作。 我现在的问题是:我怎样才能使用 std::thread 让一个类启动它自己的方法之一的线程?
【问题讨论】:
标签: c++ multithreading