工作线程使主线程MFC的对话框处于非活动状态

Work thread makes inactive dialog of the main thread MFC

本文关键字:线程 于非 活动状态 对话框 MFC 工作      更新时间:2023-10-16

我有一个基于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结束后访问控件。。。

我做错了什么?

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