开了一个线程,在后台一直运行,
在线程函数里面每隔一段较长的时间(几个小时)执行一个任务
这样的情况怎么启动和中止线程?怎么让线程隔一段时间执行一次任务?
我现在的做法是在线程函数里面用一个循环
while(bRun)
{
         定时操作
Sleep(分钟数*60*1000);
}
在主函数里面用变量bRun控制线程的运行和中止,感觉这样的做法不好

解决方案 »

  1.   

    线程外中止线程:TerminateThread。但它不会释放资源。用变量控制是最简单最好的。
      

  2.   

    SuspendThread使线程挂起,ResumeThread唤醒挂起的线程
      

  3.   

    我也在写这样的一个程序
    用的基本和你差不多
    ThreadFunc()
    {
    while(1)
    {
    /...../代码
    Sleep(20);
     if(WaitForSingleObject(hExit,O)!=WAIT_TIMEOUT)
         return 0;
    }
    return 0;//这行代码不会被执行
    }
    在主线程里设置事件hExit,当结束时
    SetEvent(hExit);// 使线程自然退出
    为了保险,可以在其后SuspendThread()
    其实主线程如果可以在需要结束的时候给线程发消息的话应该可以节约CPU时间,不知那位大侠会这招?
    另外:其实如果频率要求不是太高,可以用计数器,但两者的问题都是时间间隔的精确度不会太高(windows不是实时系统)
      

  4.   

    AfxBeginThread
    AfxEndThread
    时间你可以用SetTimer()吧,定义个消息,
      

  5.   

    看看这个http://expert.csdn.net/Expert/topic/2381/2381919.xml?temp=.3911402