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