某些数据处理时 MFC 应用程序 gui 挂起

Posted

技术标签:

【中文标题】某些数据处理时 MFC 应用程序 gui 挂起【英文标题】:MFC application gui hangs when some data processing 【发布时间】:2015-05-20 11:43:45 【问题描述】:

我有带有 GUI 的应用程序,但是当我单击实际上可以完成所有工作的按钮时,它会挂起。如何使其正常运行并“在线”显示 gui 更改?

【问题讨论】:

将处理卸载到工作线程。您的 GUI 代码是单线程的(无论如何我希望如此)。 那么它将如何更新一些主窗口信息? 线程间通信。这两个问题的答案都超出了本网站所能想象的详细程度。 【参考方案1】:

如果您不想使用后台线程并且它是某种循环需要很长时间,您可以将此成员函数添加到您的 UI 代码中并在循环中调用它:

void CMyDlg::PumpMessages()

    // Must call Create() before using the dialog
    ASSERT(m_hWnd!=NULL);

    MSG msg;
    // Handle dialog messages
    while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
    
      if(!IsDialogMessage(&msg))
      
        TranslateMessage(&msg);
        DispatchMessage(&msg);  
      
    

【讨论】:

以上是关于某些数据处理时 MFC 应用程序 gui 挂起的主要内容,如果未能解决你的问题,请参考以下文章

Qthread 不工作,GUI 仍然挂起

zmq_ctx_destroy() 在 MFC dll 中挂起

将 MFC Gui 应用程序包装到 .NET 互操作的 DLL(或其他东西)中

尽管有线程,Qt GUI 仍挂起

MFC 应用程序在 CSingleLock Lock() 后挂起

需要调用两次 setter 来强制在 MFC 中刷新 GUI