Boost Thread int参数对成员函数不起作用?

时间:2013-03-02 16:48:43

标签: c++ multithreading c++11 mingw boost-thread

全新的线程和并发,但我正在尝试将一个函数作为一个新线程启动,我不明白我的错误。我收到Candidate expects X arguments, 2 provided的错误。 0 < X <= 9重复此错误(2除外)。但是,在每个例子中我都看到它就像放置你的函数和它的参数一样简单。我的代码如下:

Trainer.cpp:

int time = 5; // for example

void Member::decrement(int seconds){
    while(seconds > 0){
        seconds--;
        Sleep(1000);
    }
    isBusy = false;
}

void Member::startDecrement(string state){
    if (state == "busy"){ // isBusy is a private boolean, hence this
        isBusy = true;
        thread myThread = thread(decrement, time); // Thread for method
        myThread.join(); 
    else {
        isBusy = false;
    }
}

然而这不起作用?有人可以给我这方面的指导,我想要做的很简单,但我发现没有办法对我有用。 thread的替代方案也很受欢迎,我已经看到std::async是一个选项,但这似乎不适用于我的编译器设置。

设置信息:-sdt=c++11MinGWWin64GCC 4.7.2

编辑

看到我已经因错误而被钉了here is the entire error log

我也尝试了答案中提供的代码,没有运气。

2 个答案:

答案 0 :(得分:2)

由于您的编译错误似乎表明decrementTime是一个成员函数,您需要提供一个对象来调用它(例如this指针):

thread myThread = thread(&Trainer::decrementTime, this, transactionTime);

答案 1 :(得分:0)

这是一个最小的完整示例:

#include <iostream>
#include <thread>

void decrement(int seconds) {
  std::cout << "seconds: " << seconds << std::endl;
}
int main(int arg, char * argv[]) {
  int time = 100;
  std::thread myThread(decrement, time);
  myThread.join();
  return 0;
}

像这样编译:{{1​​}}

下一次,提供这样的示例以及完整的错误消息,并确保在编译器标志等技术细节中没有拼写错误。