异步函数调用,带有检查进度的方法 我需要帮助实现C++中的异步调用。对于C++中的多线程,我是新手。p>

异步函数调用,带有检查进度的方法 我需要帮助实现C++中的异步调用。对于C++中的多线程,我是新手。p>,c++,multithreading,asynchronous,C++,Multithreading,Asynchronous,应该有两个功能:一个是在另一个线程中启动工作,另一个是检查进度以及工作是否已完成 我在这个网站上尝试了一些不同答案的代码,但是没有成功 int __stdcall Test::asyncStartWork() { asyncReady = false; std::thread workThread = std::thread(&Test::doWork, this); return 0; } int __stdcall Test::asyncGetProgres

应该有两个功能:一个是在另一个线程中启动工作,另一个是检查进度以及工作是否已完成

我在这个网站上尝试了一些不同答案的代码,但是没有成功

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时,出现以下错误:


在方法
测试::asyncStartWork()
中,您正在定义一个本地变量
workThread
,该变量隐藏您的类成员

因此,在
asyncGetProgress()
中,当调用
workThread.join()
时,调用它是为了一个不代表线程的线程对象(请参阅)

这会导致抛出一个带有错误条件的
std::system\u error
no\u这样的\u进程
。如果您的程序没有捕获异常,这将导致进程中止

尝试删除
asyncStartWork()
中的
std::thread
部分,例如

int __stdcall Test::asyncStartWork()
{
    asyncReady = false;
    workThread = std::thread(&Test::doWork, this);
    return 0;
}

而且,
\uu stdcall
似乎没有必要。

是必需的。以及对实际问题的描述。线程对象是本地对象,将在
asyncStartWork
结束时被销毁。快速修复方法是拆离。谢谢。多么愚蠢的错误啊。现在它似乎起作用了