2014-06-19 74 views
0

这里是嵌入式系统的新手。我必须同步两个线程与事件。我的代码只显示"Show in edit box 2sec",并不打算secondthread来显示我在那里。我应该在一个编辑框中显示一条消息2秒钟,两秒后我应该显示另一条消息3秒钟。这应该永远重复。线程与事件同步

void FirstThread(void) 
{ 

    int i; 
    //write data to edit box 
    CString szEdit; 
    szEdit.Format(_T("Show in edit box 2sec")); 
    m_editbox->SetWindowText(szEdit); 


    while(1){ 

     WaitForSingleObject (hEvent, INFINITE); 
     for(i=0;i<1;i++){ 
      Sleep(2000); 
     } 
     SetEvent (hEvent); 
    } 

} 

void SecondThread (void) 
{ 
    int i; 

    //write data to edit box 
    CString szEdit; 
    szEdit.Format(_T("Show in edit box 3 sec")); 
    m_editbox->SetWindowText(szEdit); 

    while(1){ 
     WaitForSingleObject (hEvent, INFINITE); 
     for(i=0;i<1;i++){ 
      Sleep(3000); 
     } 
     SetEvent (hEvent); 
    } 
} 
+0

是否可以安全地设置UI的东西,例如这个'm_editbox'来自两个不同的线程? – doctorlove

回答

1

你应该使用两个不同的事件,一个信号在第一线中沉睡的结束,另一个 - 在第二个线程。 (最初,其中一个事件应设置(发信号),另一个 - 未设置。)

0

您的方法存在问题。 MFC不允许你从没有创建它的线程访问控件,并且在主线程中放置WaitForSingleObject或Sleep可以阻止它处理消息,从而程序变得“无响应”。

您可以在没有线程的情况下执行此操作,无需在主线程中使用计时器,无WaitForSingleObject,无睡眠和无事件。主线程最初将调用SetTimer,然后处理WM_TIMER消息以定期更改控制文本。同时,该程序能够正常处理WM_TIMER消息之间的任何其他消息。