下面的函数用来等待m_RdOK为真,在框架类接收完一祯数据后让其变真。
问题是:如果超时前关闭程序,怎么关闭程序后进程管理中还有能看到本程序?(任务管理中是没有了)
EnterCriticalSection(&m_csRdOK)等语句好象也没什么用,也不是多线程,是我后来加上去的。BOOL CSanYaoView::WaitRecieveOK()
{
DWORD myTime;
BOOL myOK;
MSG msg;
myTime=timeGetTime(); EnterCriticalSection(&m_csRdOK);
     myOK=m_RdOK;
    LeaveCriticalSection(&m_csRdOK);
     while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) //post all messages
{ TranslateMessage(&msg);
DispatchMessage(&msg);
}  
 while(!myOK&&timeGetTime()-myTime<15000)
 {
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) //post all messages
{ TranslateMessage(&msg);
DispatchMessage(&msg);
}
EnterCriticalSection(&m_csRdOK);
     myOK=m_RdOK; 
    LeaveCriticalSection(&m_csRdOK);
if(myOK)

      return(true);
  break;
}if(timeGetTime()-myTime>15000&&!myOK)
return(false);
else
return(true);
}

解决方案 »

  1.   

    只有一个线程用来监视串口的;
    但是不执行上面的等待函数就正常
    执行了如果是超时m_RdOK还没有变true的话就发生如上现象
    真奇怪!
      

  2.   

    仍有子线程没有终止?Window 进程只要有一个子线程还在执行就不会终止。
      

  3.   

    WaitRecieveOK在视图类中
    如果不调用这个函数就能正常结束程序
    好象也不是仍然有子线程没有终止的问题……
      

  4.   

    再看看以下函数:
    不知怎么搞的,调用下面函数,然后关闭程序。
    中进程管理中还有能看到本程序!!怪!!!
    我连多线程都没有搞了!!void CSanYaoView::OnButtonYk7() 
    {
    m_RdOK=false;
    if(!WaitRecieveOK())
    AfxMessageBox("等待超时!");}
      

  5.   

    对多线程中的信息通信问题,最好的方法是用消息和事件,对全局变量或类成员变量做通讯接口有问题的,具体原因可参看技术内幕IV,我觉得问题的关键还是出在m_RdOK变量没变成true,至于后来的void CSanYaoView::OnButtonYk7() 
    {
    m_RdOK=false;
    我想还是前一个进程没有结束的缘故,因为这个进程回马上结束;线程同步问题是很……