我需要帮助在 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 时出现以下错误:
最佳答案
在方法 Test::asyncStartWork()
中,您定义了一个局部变量 workThread
,它隐藏了您的类成员。
因此在 asyncGetProgress()
中,当调用 workThread.join()
时,您正在为不代表线程的线程对象调用它(参见 here ) .
这导致 std::system_error
被抛出,错误条件为 no_such_process
。如果您的程序没有捕获异常,这将导致进程中止。
尝试删除 asyncStartWork()
中的 std::thread
部分,例如
int __stdcall Test::asyncStartWork()
{
asyncReady = false;
workThread = std::thread(&Test::doWork, this);
return 0;
}
此外,__stdcall
似乎没有必要。
关于c++ - 异步函数调用,带有检查进度的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36133276/