std::async 调用中的回调函数错误

问题描述 投票:0回答:1

使用 this 代码示例使用

std::function
std::bind
为以下代码添加多线程回调机制。

void MyClass::afterCompleteCallback(string stsstr)
{
     CString strResult;
     strResult.Format(L"You received: %s", stsstr); //expected "My Output 1"
     GetDlgItem(IDC_STATIC)->SetWindowTextW(strResult);
}

void MyClass::StartMyThread()
{
    auto callback = std::bind(&MyClass::afterCompleteCallback, this, std::placeholders::_1);
    string _data = "My Input 1"
    _aStatus = std::async(std::launch::async, longRunningFunction(callback), data);
}


void MyClass::OnBnClickedButton1()
{
    StartMyThread();
}

我正在用

修改
longRunningFunction(callback)

auto _aStatus = std::async(std::launch::async, longRunningFunction(回调), 数据);

但出现错误

no instance of overloaded function matches the argument list
错误。

我的最终目标是将一些

str
数据传递给线程
OnButtonClick() event
,并通过回调从线程获取
str
结果并在MFC TextEdit控件中更新。我怎样才能实现这个目标?

c++ multithreading asynchronous mfc stdasync
1个回答
0
投票

您似乎想要运行一个长时间运行的方法来生成一些输出,然后想要在 GUI 线程中显示该输出。您需要的是一个事件循环(MFC 可能有一个)。您的工作线程/线程池应该运行长时间运行的函数,将结果存储在某处,并将消息发布到事件循环。然后事件循环需要获取结果并显示它。我对 MFC 的工作原理不是很熟悉,但是看看这些概念,你就会发现如何实现你想要做的事情。

© www.soinside.com 2019 - 2024. All rights reserved.