写了一个提醒程序做成系统服务。运行得倒是没有问题,每隔3秒检查一下时间,时间到了就提醒。但是发现每3秒光标旁边就会出现一次沙漏。我的任务在ServiceMain()中调用:
 ServiceMain();stdcall;里面涉及我的任务的是下面这样的
   
      while true do
       begin
         Sleep(3000);         
         Myfunc();//时间到了没?         
       end;怎么才能不让沙漏出现呢?

解决方案 »

  1.   

    使用多线程
    或者你是不是用了这个?
    screen.cursor:=crHourGlass
      

  2.   

    使用线程启动我的任务函数也一样,每隔3秒屏幕上的光标旁边就会出现一下沙漏。
    没有使用screen.cursor这样的语句。程序没生成窗体,只有messagebox。
      

  3.   

    个人感觉用sleep不太好,使用timer控件试试
      

  4.   

    sleep会造成消息阻塞.用timer一般定时都是不断改变搜索步长.假设你定的时间是10小时以后,每3秒查询一次显然太浪费了. 先把timer的时间间隔定在1小时,每次触发时候计算离预定时间还有多久.如果离预定时间小于2小时,则将timer的间隔改为半小时...依此类推
      

  5.   

    1、用Timer
    Timer.Interval = 3000;
    procedure TForm1.Timer1Ontimer(Sender: TObject);
    begin
      Myfunc();//时间到了没?        
    end;2、把
          while true do 
          begin 
            Sleep(3000);        
            Myfunc();//时间到了没?        
          end; 
    放到线程里执行,让Sleep只阻塞这个线程3、检查程序是不是有
    screen.cursor:=crHourGlass代码存在,查找一下
      

  6.   

    把while true do 
          begin 
            Sleep(3000);        
            Myfunc();//时间到了没?        
          end; 
    放到线程里执行.
     
    这个提议值得考虑。我看看,研究一下怎么把它放到线程里。
      

  7.   

    试一试     
    while true do 
          begin 
            Application.processmessage;
            Sleep(3000);        
            Myfunc();//时间到了没?        
          end; 
      

  8.   

    可是它说Application没有定义
    这一句是什么意思呢?
      

  9.   

    你是不是删除了什么单元.比如:FORMS
      

  10.   

    程序这些天没重新编译。
    使用的单元只有Windows,winsvr,shellapi.
      

  11.   

    Application.processmessage; 
    风险大的