void CsimilateDlg::OnBnClickedButton1()
{
 
 // TODO: 在此添加控件通知处理程序代码
 
 HANDLE h1=AfxBeginThread(ThreadFunc1,this,0,0,0,0);
hMutex = CreateMutex(NULL, FALSE, (LPWSTR)"screen");  
HANDLE h2=AfxBeginThread(ThreadFunc2,this,0,0,0,0);
HANDLE h3=AfxBeginThread(ThreadFunc3,this,0,0,0,0);
while(1);
 
}
UINT ThreadFunc1(LPVOID lpParam)
{
while(1)  
  
 {  
        WaitForSingleObject(hMutex, INFINITE); 
  
           CsimilateDlg* dlg=(CsimilateDlg*)lpParam; 
  
         dlg->SetDlgItemTextW(IDC_EDIT1,_T("A"));
      
         Sleep(1000);  
        
ReleaseMutex(hMutex);  
    }  
 return 0;}
UINT ThreadFunc2(LPVOID lpParam)
{
 
 while(1)  
    {  
        
WaitForSingleObject(hMutex, INFINITE);
CsimilateDlg* mydlg=(CsimilateDlg*)lpParam;
mydlg->SetDlgItemText(IDC_EDIT2,_T("B"));
  
Sleep(1000);
  ReleaseMutex(hMutex);
}
 return 0;
}
UINT ThreadFunc3(LPVOID lpParam)
{
 
 while(1)
 {
  CsimilateDlg* dlg=(CsimilateDlg*)lpParam;
  
dlg->SetDlgItemText(IDC_EDIT3,_T("C"));
 }
 return 0;}
键面如图所示,点击按钮线程1,2交替执行,线程3直接执行!谢谢!

解决方案 »

  1.   

    试试:
    hMutex = CreateMutex(NULL, FALSE, (LPWSTR)"screen");// 后加: 
    ReleaseMutex(hMutex);
      

  2.   

    要不试试这个?
    GetDlgItem(ID)->SetWindowText("a");
      

  3.   

    你的这个消息处理函数里while(1)是个死循环啊。  其他线程SetDlgItemTextW本质上也只是发消息到窗口所属线程处理。你那窗口所属线程在
    死循环中呢。当然不能更新数据了。
    void CsimilateDlg::OnBnClickedButton1()
    {
      
     // TODO: 在此添加控件通知处理程序代码
      
     HANDLE h1=AfxBeginThread(ThreadFunc1,this,0,0,0,0);
    hMutex = CreateMutex(NULL, FALSE, (LPWSTR)"screen");  
    HANDLE h2=AfxBeginThread(ThreadFunc2,this,0,0,0,0);
    HANDLE h3=AfxBeginThread(ThreadFunc3,this,0,0,0,0);
    while(1);
      
    }