程序简单,就是让喇叭每2秒响一次,发布后就不行。=============================
procedure TService1.ServiceExecute(Sender: TService);
begin
  timer1.Enabled:=true;
  while not Terminated do ServiceThread.ProcessRequests(true);
  timer1.Enabled:=false;
end;procedure TService1.Timer1Timer(Sender: TObject);begin
  Windows.Beep(330, 300);
end;

解决方案 »

  1.   

    服务是在TApplication的基础上再封装的,因此有消息循环的,TTimer组件可以使用,Windows.Beep(330, 300)这个函数在有些主板上是发不出声音的,只有装了蜂鸣器的主板才发声。
      

  2.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs,Unit2;type
      TService1 = class(TService)
        procedure ServiceStart(Sender: TService; var Started: Boolean);
        procedure ServiceStop(Sender: TService; var Stopped: Boolean);
        procedure ServiceContinue(Sender: TService; var Continued: Boolean);  private
        { Private declarations }
      public
        function GetServiceController: TServiceController; override;
        { Public declarations }
      end;var
      Service1: TService1;
      DataThread: th;
    implementation{$R *.DFM}procedure ServiceController(CtrlCode: DWord); stdcall;
    begin
      Service1.Controller(CtrlCode);
    end;function TService1.GetServiceController: TServiceController;
    begin
      Result := ServiceController;
    end;procedure TService1.ServiceStart(Sender: TService; var Started: Boolean);
    begin
      DataThread:= th.Create(False);//创建线程对象
      Started := True;
    end;procedure TService1.ServiceStop(Sender: TService; var Stopped: Boolean);
    begin
      DataThread.Terminate; //关闭线程
      Stopped := True;
    end;procedure TService1.ServiceContinue(Sender: TService;
      var Continued: Boolean);
    begin
      DataThread.Resume;     //重新启动
      Continued := True;
    end;end.unit Unit2;interface
    uses
      Classes,SysUtils,windows,ExtCtrls; type
      th = class(TThread)
      tmr1: TTimer;
      private
        { Private declarations }
      protected
        procedure Execute; override;
      end;implementationprocedure th.Execute;
    begin
      while True do
      begin
          Sleep(2000);
          Windows.Beep(330, 300);
      end;end;end.刚才试验过可以的,要用线程来做
      

  3.   


    可以在DELPHI7环境,带参数/install或者/uninstall按F9运行时,是有蜂鸣响的,一旦到服务里面去启动,就不响了。那原来用的什么响啊,听着也像主板上的响声。但是我可以关掉声音——难道不是蜂鸣器?
      

  4.   


    unit2里面的tmr1没有用上啊?
      

  5.   


    我试过在我的电脑是可以响的,是不是你电脑主板speak线没插啊
      

  6.   

    你在线程中ShowMessage试试看看线程代码是否有执行
      

  7.   

    如果在服务中ShowMessage的话将服务属性 "允许服务与桌面交互" 勾上
      

  8.   

    说实在的,楼主不会是直接执行这个EXE吧???  如果真是这样,本来就没有问题的.如果真是那样,楼主只需要在命令行执行 yourprj.exe /install 
    然后在操作系统里启动或 net start 你的服务就行了
      

  9.   

    unit Unit2;interface
    uses
      Classes,SysUtils,windows,ExtCtrls,Dialogs; type
      th = class(TThread)
      Tmr : TTimer;
      private
        { Private declarations }
      protected
        procedure Execute; override;
        procedure TimerOn(Sender: TObject);
        procedure Destory;
      end;implementation
    procedure th.Destory;
    begin
    inherited;
      Tmr.Free;
    end;procedure th.Execute;
    begin
      Tmr := TTimer.Create(nil);
      Tmr.Interval := 2000;
      Tmr.OnTimer := TimerOn;
      Tmr.Enabled := True;end;
    procedure th.TimerOn(Sender: TObject);
    begin
      Windows.Beep(330, 300);
    end;end.我在线程中用timer在执行windows.beep,线程执行完毕Timer就失效了,哪位帮我改改代码
      

  10.   


    不是有sleep了吗?不需要用timer了吧?
    我是不明白
      

  11.   

    我是想研究一下线程中如何用timer