程序分为工作者线程和界面线程,考虑通过界面线程向工作者线程发送消息,来实现两个线程的通讯,能不能实现,该怎么实现?

解决方案 »

  1.   

    线程函数中
    MSG  msg;while (GetMessage(&msg, NULL, 0, 0))
    {
      switch (msg.message)
      {
         ...
      }
    }主线程中
    PostThreadMessage(dwThreadID, UM_MESSAGE, 0, 0);
      

  2.   

    同步事件主要是使用
    CreateEvent
    SetEvent
    ResetEvent
    WaitForSingleObject
    WaitForMultipleObjects
    等函数,可以在MSDN找到其用法另外也可以用 MsgWaitForMultipleObjects 同时使用两种方法
      

  3.   

    能不能这样:工作者线程,当有消息的时候收消息进行处理,而没有消息的时候自动挂起?
    Windows有没有这样一种功能呢?
      

  4.   

    能不能这样:工作者线程,当有消息的时候收消息进行处理,而没有消息的时候自动挂起?
    Windows有没有这样一种功能呢?
    =====================================
    这样的话,还是用事件好些。
      

  5.   

    界面用线程消息PostThreadMessage
      

  6.   

    BOOL    g_bRunning = true;
    while (g_bRunning)
    {
    while (PeekMessage(&Msg, NULL, 0, 0, PM_NOREMOVE))
    {
    BOOL bGetResult = GetMessage(&Msg, NULL, 0, 0);
    TranslateMessage(&Msg);
    DispatchMessage(&Msg);
    if (bGetResult==0)
    g_bRunning = false;
    }
    if (g_bRunning)
    {
    ....//空闲处理
    }
    }
      

  7.   

    可以,跨线程要传递句柄而非对象。如果你要自己调度一个线程,可以试试使用Fiber。
      

  8.   

    工作线程,就用event同步好了
      

  9.   

    能不能这样:工作者线程,当有消息的时候收消息进行处理,而没有消息的时候自动挂起?
    Windows有没有这样一种功能呢?
    ----------------------------------------------------------
    GetMessage就可以实现这样的要求
    GetMessage在没有消息时是阻塞的,当WM_QUIT时返回FALSE,其它消息返回TRUE