boost:thread - 编译错误

时间:2009-02-13 15:15:23

标签: multithreading boost

我想在我的程序中使用boost :: thread,但是得到以下编译器错误(Visual Studio 2005):

Error   1   **error C2064**: term does not evaluate to a function taking 0
arguments   d:\...\boost_1_37_0\boost\thread\detail\thread.hpp  56

因此,我试图在一个小程序中重新创建问题,并从this site修改了工作的Hello World示例。

我的测试代码现在看起来像这样。为什么不在课堂上工作?:

#include <boost/thread.hpp>
#include <iostream>


class HelloWorld
{
public:
    void hello();
    void entry();
};

void HelloWorld::entry()
{
    boost::thread thrd(&HelloWorld::hello);
    thrd.join();
}

void HelloWorld::hello() 
{ 
    std::cout << "Hello world, I'm a thread!" << std::endl;
}

int main(int argc, char* argv[]) 
{ 
    HelloWorld *bla = new HelloWorld;
    bla->entry();
    return 0;
}

3 个答案:

答案 0 :(得分:7)

尝试这样 - boost :: thread构造函数需要一个boost :: function0(函数指针是函数指针,但由于这个指针,成员函数指针不是)。

void HelloWorld::entry()
{
    boost::thread thrd(boost::bind(&HelloWorld::hello,this));
    thrd.join();
}

答案 1 :(得分:4)

成员函数将 this 指针作为第一个参数。由于有一个boost :: thread构造函数接受函数参数,因此您不需要使用boost :: bind。这也有效:

void HelloWorld::entry()
{
    boost::thread thrd(&HelloWorld::hello,this);
    thrd.join();
}

如果你的函数需要参数,你可以将它们放在 this 指针参数之后。

答案 2 :(得分:0)

您正在将成员函数传递给线程对象,作为线程启动时要调用的函数。由于线程本身没有对象,因此无法调用成员函数。您可以将hello函数设置为static,或者查看boost :: bind库以发送对象。