Hi,
我写了一个服务程式,打算在某个约定时刻才去执行某项任务。
目前代码片段如下:while(1)
{
   //Get Current Time
   strNow = ...
   
   if( strNow == "08:00:00" )
   {
      //执行作业
      ...
      ...
      Sleep(1000); //担心作业太快,重复执行,所以延迟一秒
   }
}但是,我发现这种写法,服务占用CPU太高(在任务管理器-进程中查看),而且绝大部分时间在空跑。
指定不能用计划任务实现定时,有什么更好算法?兄弟初次写服务程式,还望高手赐教!谢谢!

解决方案 »

  1.   

    while(1)
    {
       //Get Current Time
       strNow = ...
       
       if( strNow == "08:00:00" )
       {
          //执行作业
          ...
          ...
          //Sleep(1000); //担心作业太快,重复执行,所以延迟一秒
       }
       
       Sleep(1000); //担心作业太快,重复执行,所以延迟一秒}
      

  2.   

    尽量不要用while(1),可以用象楼上说的timer,或自己来个线程.
      

  3.   

    1.再睡1000毫秒,会不会误了定时作业?
    2.这些核心代码在Service程式中的Service_Start()函数中,用Timer如何实现?
      用线程的具体思路如何?
      谢谢!
      

  4.   

    另外,Call Sleep(1000) 期间,CPU 会被释放占用么?
    任务管理器中列出的"System Idle"进程,占用CPU 80至98浮动,是否因为应用程式中Sleep()的缘故?
    谢谢!
      

  5.   

    把Sleep()放在有可能忙等待、或忙检测的代码处,可将空转的cpu的时间留给其它的线程。1.再睡1000毫秒,会不会误了定时作业?----可以这样改进:while(1)
    {
       //Get Current Time
       strNow = ...
       
       if( strNow == "08:00:00" )
       {
          //执行作业
          ...
        }
        else  Sleep(100);   //消除忙检测,其中100可设为其它合适的值。 
    }上述方法最简单,且不失性能,开线程和运用其它同步代码都使code复杂化,而性能没有多少提高。