全新的线程和并发,但我正在尝试将一个函数作为一个新线程启动,我不明白我的错误。我收到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++11
,MinGW
,Win64
,GCC 4.7.2
编辑:
看到我已经因错误而被钉了here is the entire error log。
我也尝试了答案中提供的代码,没有运气。
答案 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}}
下一次,提供这样的示例以及完整的错误消息,并确保在编译器标志等技术细节中没有拼写错误。