线程与事件同步

时间:2014-06-19 09:29:11

标签: c++ multithreading visual-studio

这里有嵌入式系统新手。我必须将两个线程与事件同步。我的代码仅显示"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);
    }
}

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

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