//begin a new thread
m_pMonitorThread = ::AfxBeginThread((AFX_THREADPROC)MonitorThread, this, THREAD_PRIORITY_ABOVE_NORMAL);
//wait for thead exit
m_bExitMonitorThread = true;
if(m_pMonitorThread) WaitForSingleObject(m_pMonitorThread->m_hThread, INFINITE);
//thread pro
HRESULT CCmppAgentDlg::MonitorThread(LPVOID param)
{
...  bool& bExit = pDlg->m_bExitMonitorThread;
  time_t last = time(NULL);
  while(!bExit)
  {
   Sleep(10);
   if((time(NULL) - last) >= HeartBeatInterval)
   {
    //send hearbeat packet if service is not run or thread is active in run
    if(ThreadActiveFlag == (unsigned char)0x07 || !pDlg->m_pThread)
    {
     MonitorTask.SendHeartbeatFrame(0);
     ThreadActiveFlag  = 0x0;
    }
    last = time(NULL);
  }...
}

解决方案 »

  1.   

    至于更新界面,安全的做法是向窗口发消息PostMessage(...);
      

  2.   

    可以用信号量解决这个问题,相关的API有(细节可查MSDN):
    CreateSemaphore       //创建信号量
    WaitForSingleObject   //相当于P操作
    ReleaseSemaphore      //相当于V操作   用一线程控制界面上的控件中的值同步更新,假设信号量句柄为update:
    如:
    while(1)
    {  更新操作;
       P(update);
    }
    然后,见下面UINT CMYVIEW::threadfun(LPVOID k)
    {
    SLEEP(5000);
    a = a + 1 ;
    V(update);        ???;//让界面上的控件中的值同步更新,如何实现;
    b = b + 1 ;
    V(update);        ???;//让界面上的控件中的值同步更新,如何实现;
    }
    CMYVIEW::ONBUTTONSTOPTHREAD()
    {
    调用线程的exit();  ???;//让生成的线程立即终止运行,如何实现;
    }有一个我的作业题,也是线程同步问题,如果你需要的话,发email到
    [email protected],我用附件发给你.
      

  3.   

    发送消息
    但是我怎么发送不到相应的函数当中呢
    从发送的返回值来看是发送成功了
    而且GETLASTERROR也显示成功
    但是就是进不去相应的函数
    怎么回事?
    谁有这样的例子,麻烦给发一个吧
    [email protected]