线程提升无法解决重载功能

时间:2013-07-09 14:07:15

标签: multithreading function pointers boost

我想创建一个新的线程来运行一个函数,但是当我编译终端时会显示以下错误信息:

g++ -o main.o -c main.cpp -O0 -g -Wall -fmessage-length=0 -D__STDC_CONSTANT_MACROS -std=gnu++0x  -lboost_filesystem -lboost_log_setup -lboost_log -lboost_chrono -lboost_thread -lz -lpthread -ldl -lm  
main.cpp: In function ‘int main(int, char**)’:
main.cpp:35:13: error: statement cannot resolve address of overloaded function
make: *** [main.o] Error 1

我不能给你我的全部代码,因为如果我在里面包含代码,stackoverflow拒绝发布消息。 这是一个示例:

void foo(); 

boost::thread t(foo);

任何帮助都会受到赞赏。感谢

1 个答案:

答案 0 :(得分:0)

除非它是静态方法,否则你需要使用bind()(无论何时启动非静态方法都需要bind())。

示例:

class Worker {
    int returnValue_;
public:
    inline void Run() {
        //...
        boost::this_thread::sleep(boost::posix_time::seconds(2));
        returnValue_ = 3;
}
    inline int getValue() const {
        return returnValue_;
    }
};

Worker worker;
boost::thread th (boost::bind(&Worker::Run, &worker));