在线程函数里面是每隔1分钟执行一次的。
while(1)
{
   if(!m_bLived)
        AfxEndThread();
   Sleep(60000);//每隔一分钟
   ... //要做的事情
}这样一来每次退出的时候就得等待一分钟了?能不能让线程很快就退出呢?
是正常退出呀,不希望有什么内存没释放之类事情了

解决方案 »

  1.   

    把Sleep(60000);换成int i = 0;
    while(i < 60)
    {
        ++i;
        if(!m_bLived)
            AfxEndThread();
        Sleep(1000);
    }
      

  2.   

    这段代码改的没错啊,用一个标志位决定是否退出是很正常的做法。
    你想在什么时候退出,Sleep(1000)中退出吗?
      

  3.   

    要不这样吧,你不要用Sleep(60000)了,改用WaitForSingObject吧,然后在主线程中设一个定时器,在定时器中定时对内核对象置位和复位,这样,主线程就可以控制子线程的退出了。
      

  4.   

    呵呵,也就是说只能够缩短间隔了?在1min间隔的时候是无法快速退出的了?
    我是想能不能在CWnidThread *pThread指针上面有什么方法的?
      

  5.   

    添加HANDLE m_hEvent;for (;;)
    {
      DWORD ret = WaitForSingleObject(m_hEvent, 60000);
      if (WAIT_OBJECT_0 == ret || WAIT_FAILED == ret)
        return ret;
      ... //要做的事情
    }想停止时SetEvent(m_hEvent);
      

  6.   

    我试了一下,果然一下子就over了:)。但是我想不明白的是一个是Sleep,一个是WaitForSingleObject,都是等待了间隔nInterval才执行操作的,但为什么前者就不能立即执行,后者确能够一下子就退出了?
      

  7.   

    难道说WaitForSingleObject也创建了一个线程?
      

  8.   

    sleep是放弃CPU时间片,WaitForSingleObject是真的在等待。
      

  9.   


    我以前就经常用event去处理这个问题。Sleep()是无论怎么样都要等够设定的时间。WaitForSingleObject是等待内核对象的有信号状态,也有个设定的时间。当event变成有信号状态时,立即结束等待。如果event始终为无信号状态,则会等待到最大设定时间。也就是说WaitForSingleObject有两个结束等待的条件。一个是信号量变成有信号状态,一个是达到规定时间,满足其一即可,而sleep只有一个结束等待的条件。通过手动设置有信号状态使其立即结束等待