我需要帮助在C ++中实现异步函数调用。我是C ++中多线程的新手。
可能有两个功能:一个用于在另一个线程中启动工作,一个用于检查进度以及是否已完成工作。
我尝试使用本网站上不同答案的一些代码,但它不起作用。
int __stdcall Test::asyncStartWork()
{
asyncReady = false;
std::thread workThread = std::thread(&Test::doWork, this);
return 0;
}
int __stdcall Test::asyncGetProgress()
{
if (asyncReady = true)
{
workThread.join();
return 100;
}
else
{
return asyncProgress;
}
}
int __stdcall Test::doWork()
{
//do work and write progress to asyncProgress
//at the end
asyncReady = true
}
调用asyncStartWork时出现以下错误:
答案 0 :(得分:1)
在方法Test::asyncStartWork()
中,您正在定义一个隐藏您的类成员的局部变量workThread
。
所以在asyncGetProgress()
中,当调用workThread.join()
时,你正在为一个不代表线程的线程对象调用它(参见here)。
这导致std::system_error
被抛出错误条件no_such_process
。如果您的程序没有捕获异常,则会导致进程中止。
尝试删除std::thread
中的asyncStartWork()
部分,例如
int __stdcall Test::asyncStartWork()
{
asyncReady = false;
workThread = std::thread(&Test::doWork, this);
return 0;
}
此外,__stdcall
似乎没必要。