我有一个基于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或主对话框上的其他按钮或其他内容。如果我不这样做 - 我只能在结束后才能访问控件......
我做错了什么?
答案 0 :(得分:0)
(1)工作线程函数必须是静态的。如果未声明为静态,则您发布的代码将无法编译。 (2)工作线程不应该访问任何控件,只能访问数据。