我有一个主线程MainThread ,在主线程中创建一个用户界面线程MyUIThread ,我想问:
1、主线程MainThread和MyUIThread的消息循环 如何进行消息传递?
2、MyUIThread可以认为是一个新的进程吗?他和一般的进程有什么区别?
3、如果他们之间需要交换数据,财务采取什么方式比较合适?谢谢各位能帮助小弟。

解决方案 »

  1.   

    1、主线程MainThread和MyUIThread的消息循环 如何进行消息传递?
    具体消息的循环过程,建议你看看MFC编程的书。消息传递的话用SendMessage(),PostMessage().在启动MyUIThread的时候把MainThread的HWND传入,同时MainThread保存MyUIThread的HWND,消息传递函数需要这些参数.
    LRESULT SendMessage(
      HWND hWnd,      // handle of destination window
      UINT Msg,       // message to send
      WPARAM wParam,  // first message parameter
      LPARAM lParam   // second message parameter
    );2、MyUIThread可以认为是一个新的进程吗?他和一般的进程有什么区别?
    MyUIThread只是一个线程。进程只是个容器,线程才是真正分配CPU时间运行的。3、如果他们之间需要交换数据,财务采取什么方式比较合适?
    全局变量的方法,最快。消息量很小的话,直接用消息传递函数的wParam,lParam。数据多的话,就只能用全局变量的方式,不过要做好资源保护。建议你看看windows核心编程。
      

  2.   

    TO huang_yu(HY) 
    首先感谢楼上的诚恳的回答。
    各位还有什么高见。谢谢
      

  3.   

    http://www.codeproject.com/threads/usinguithreads.asp
      

  4.   

    一般来说线程间消息传递函数有SendMessage(),PostMessage,PostThreadMessage()等,
    其中前两个需要窗口句柄,后一个不用,但是需要知道线程ID。进程是记录一个应用程序运行的所需的信息,比如存放进程句柄表,记录当前进程中有几个线程等等的信息库,但是CPU真正运行的内容是线程的东西,也就是说操作系统在调度的时候,它根据线程上下文内容来开始运行。在进程内用全局变量就可以了,如果在进程之间的话,可以用共享内存方式等。
      

  5.   

    我还是不太明白的是:
    1、个消息循环,他们之间如何进行信息传递?on_thread_message 是不是来进行他们的之间的某种映射关系的?2、如果通过PostThreadMessage()向一个线程投递一个消息,接受消息的Thread的消息循环是否要经过某种映射,还是直接可以使用?我重载了接受消息的消息处理函数
    LRESULT CMainFrame::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
    {
    // TODO: Add your specialized code here and/or call the base class
    if(message==WM_MY_MESS)
              {}         
           return CFrameWnd::WindowProc(message, wParam, lParam);
    }无法捕捉到我定义的消息,什么原因?难道消息还经过某种映射吗?谢谢