c++ - 在多线程环境中对代码进行排序

标签 c++ multithreading concurrency mfc stdthread

我有一个多线程 C++ MFC 应用程序。我有一个工作线程来执行我的程序逻辑,主线程专用于处理 GUI 事件。 GUI 线程生成程序逻辑线程,并从中分离执行,就像这样 -

void CMyDocument::InGUIThread()
{
    std::thread tProgramLogic(programLogicThreadFunction);
    tProgramLogic.detach()
}

我的程序逻辑执行大约需要 5 分钟。

这是我的问题:我想在我的程序逻辑执行完毕后在主 GUI 线程中调用一个函数。如何在 programLogic 线程接近执行结束时向我的主线程发出信号?

附言我分离我的 programLogic 线程的原因是我不会卡住我的主线程,因此它可以响应 GUI 事件。

最佳答案

您可以使用 C++11 async 解决方案并使用 wait_for 轮询结果,但在您的特定情况下(在 Windows 环境中),我会寻求更好的解决方案:

1) 定义a custom WM_ message并将其映射以进行处理,例如

 #define WM_MYMSG (WM_USER + 42)
 BEGIN_MESSAGE_MAP(CMyApp, CWinApp)
     ON_MESSAGE(WM_MYMSG, ThreadHasFinished)
 END_MESSAGE_MAP()

2) Post WM_MYMSG当您的逻辑线程以

结束到主窗口时

3) 在ThreadHasFinished

中处理逻辑的终止

关于c++ - 在多线程环境中对代码进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26434649/

相关文章:

c++ - 在 SDL 中使对象独立移动(如枪声)

c++ - 保存由 OpenCV 上的 Hough Circle 检测到的圆圈内的内容

多线程与共享内存

Java多线程使线程以与它们开始但同时运行的顺序相同的顺序结束

c++ - 为什么我在一份声明中得到多种类型?

c++ 每 5 分钟调用一次函数

python - 如何解决/绕过似乎与 GIL 相关的锁定问题

java线程不同的流

java - 在 catch block 中调用 ReentrantReadWriteLock#lock() 是否错误?

java - 使用ReentrantLock和synchronized一样可靠吗?