我现在想在主线程中创建一个辅助线程,该辅助线程的作用是定时(隔一段时间,例如每个10秒)向一个数据结构查询,然后根据查询的结果给主线程发信息,该怎么样是实现呢?同时线程间怎么通讯呢?

解决方案 »

  1.   

    用工作线程
    UINT WorkThread(LPVOID lpParam)
    {
        LPYOURPARAMSTRUCT lpstruct;    // 定义一个Struct,Struct中有一个主线程的主HWND
        lpstruct = (LPYOURPARAMSTRUCT)lpParam;    Query(...);
        
      
        // 把你的查询结果放入一个缓存区中,这个缓存区可以由lpstruct中定义的
        // 用一个临界对象同步这个缓存区。
        EnterCriticalSection();
        //  缓存区
        LeaveCriticalSection();    // 通知主线程的窗口
        SendMessage(lpstruct->hwnd, WM_YOURMSG, 0, 0);...}
      

  2.   

    JJONY,谢谢你!你能否告诉我怎么样创建一个线程嘛?
      

  3.   

    ::afxBeginThread(WorkThread);  最简单的方法了, 然后主线程的窗口接收WM_YOURMSG的做法:
    1. 先定义一个LRESULT OnYourMsg(WPARAM wParam, LPARAM lParam)处理函数
    2. 在窗口类的MESSAGE_MAP中加入ON_REGISTERED_MESSAGE(WM_YOURMSG, OnYourMsg)
    3. 在项目的一个全局地方如stdafx.h中定义
    const UINT WM_YOURMSG = RegisterWindowMessage("WM_YOURMSG")PostThreadMessage也一样的做法不过OnYourMsg就是在主线程里的MESSSAGE_MAP了。
      

  4.   

    UINT Thread(LPVOID lpParam)
    {
       while(1)
       {    if (DataList.GetCount()!=0)
        {
         SendMessage();}
        }
       return 0;
    }
      

  5.   

    UINT workThread( VOID * )
    {
        while( true )
       {
           // 锁定
           数据结构查询
           通知主线称       // SendMessage(),事件,全局变量都可以
           // 解锁       Sleep(100000);  // 注:最小时间间隔10ms
        }
    }
      

  6.   

    你去买本<<Win32多线程编程>>看吧.候先生译的.
      

  7.   

    其实这段代码有点问题, 但不会影响最终结果, 把SendMessage改为PostMessage或PostThreadMessage吧。这样同步操作才有效,因为SendMessage是直接调用窗口的WndProc,也就是说直接到OnYourMsg调用完毕才返回的。
    这样就已经实现了同步操作,没必要CriticalSection了,但这里就有一个线程间切换过程,效率就不太高了。Post*函数只把MESSAGE放上MessageQueue就返回了,效率较高。 怎样做都对,主要看你项目要求了。