【问题标题】:Work thread makes inactive dialog of the main thread MFC工作线程使主线程 MFC 的对话框处于非活动状态
【发布时间】:2013-08-22 13:16:36
【问题描述】:

我有一个基于 MFC 对话框的应用程序,它有一个对话框。在按钮单击我开始另一个工作线程。不幸的是,虽然工作线程的功能正在运行,但无法访问我的对话框上的控件。

void CrMainDlg::OnBnClickedButton1()
{
   //...
   CWinThread* fonThread = AfxBeginThread(WorkerThreadProc, iP, THREAD_PRIORITY_NORMAL, 0, 0, NULL);
   //...
 } 

UINT CrMainDlg::WorkerThreadProc(LPVOID Param)
{
//...
       while(/*some bool*/)
       {
           //makesomething
           Sleep(1000);
       }
       //...
}

只有当我编写 Sleep(1000) 时,我才能访问主对话框上的 ScrollBar 或其他按钮或其他内容。如果我不这样做 - 我只能在 while 结束后访问控件...

我做错了什么?

【问题讨论】:

  • 你在做点什么。
  • 你在做什么,你是怎么做的?
  • 您是否将编译器选项设置为使用库的多线程版本?
  • 在工作线程中,我通过矢量并在主对话框中加载一些图片。这个向量是静态的和全局的。
  • Zac,如何在VS2010中设置这样的选项?

标签: c++ multithreading mfc


【解决方案1】:

(1) 工作线程函数必须是静态的。如果它没有声明为静态的,您发布的代码将无法编译。 (2) 工作线程不应该访问任何控件,只访问数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-22
    • 2012-04-16
    • 1970-01-01
    • 1970-01-01
    • 2010-12-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多