-3

对线程和并发完全陌生,但我试图将一个函数作为一个新线程启动,但我不明白我的错误。我收到一个错误Candidate expects X arguments, 2 provided。此错误重复0 < X <= 9(除了 2)。但是,在我看到的每个示例中,它就像放置您的函数及其参数一样简单。我的代码如下所示:

培训师.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++11, MinGW, Win64,GCC 4.7.2

编辑

看到我因错误而被钉死,这是整个错误日志

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

4

2 回答 2

2

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

thread myThread = thread(&Trainer::decrementTime, this, transactionTime);
于 2013-03-02T17:33:49.630 回答
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;
}

像这样编译它:g++ thread.cpp -o thread -std=c++11 -pthread

下一次,给出这样的例子和完整的错误信息,并确保在编译器标志等技术细节中没有拼写错误。

于 2013-03-02T17:06:29.333 回答