异步函数调用,用一种方法来检查进度

时间:2016-03-21 14:09:58

标签: c++ multithreading asynchronous

我需要帮助在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时出现以下错误:

enter image description here

1 个答案:

答案 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似乎没必要。