我的意思不想放在EXE主程序里用时钟,而是直接用DLL代码里的时钟来达到监控的目的,不知这个想法能不能实现。

解决方案 »

  1.   

    没试过,假如timer 组件所在单元就可以了吧
      

  2.   

    timer组件需要消息循环支持,如果DLL里没窗体的话,用多媒体定时器
    引用mmsystem单元,用里面的timeSetEvent,注意同步问题
      

  3.   

    DLL可以加一个窗体,只是加进去好像也看不到,我试过调用时钟里的子程序,每次只能有一次,并不能一直循环,不知有什么办法让它可以一直循环.
      

  4.   


    procedure ThreadTimer;
    var
      FMessage: TMsg;
      Timer: Integer;
      FContinue: Boolean;
    begin
      PeekMessage(FMessage, 0, WM_USER, WM_USER, PM_NOREMOVE);
      //创建时钟
      //这里的 1000 设置你的时钟定时的频率,单位为毫秒
      Timer := SetTimer(0,1,1000,nil);
      FContinue := True;
      while (GetMessage(FMessage, 0, 0, 0) and FContinue) do begin
        case FMessage.message of
          WM_TIMER: begin
            //.....这里加入你的代码
            //当你需要退出循环的时候设置 FContinue := False;
          end;
        end;
        DispatchMessage(FMessage);
      end;
      //删除时钟
      KillTimer(0,Timer);
    end;
      

  5.   

    多谢了!现在知道setTimer这个API可以循环了.