我的多线程应用中要定时、循环,并且需要同步的执行一些任务,我用CreateWaitableTimer创建了一个定时器对象,并用WaitForSingleObject等待信号出现,正常情况下这样用没问题,但是当我的程序要退出时,因为这些等待中的线程都被挂起了,如何使这些线程立即获得信号(换句话说就是强制终止等待信号状态)并退出代码是一个头痛的问题,有什么办法可以使得这些等待中的线程全部获得信号并退出循环?
var
  lpDueTime: Int64;        //延迟
  lPeriod: Integer;        //周期
  lpTimerName: PChar;
begin
  lpTimerName := PChar('Knowing'+IntToStr(Handle));     //定时内核对象名
  lPeriod := Trunc(FInterval*1000);              //周期
  lpDueTime := 0-1*100*10000;  //0-lPeriod*10000;//负数为相对时间:定时器何时开始有信号,这个参数能精确到100纳秒
  hTimerEvent := CreateWaitableTimer(nil, False, lpTimerName);    //第二个参数为是否手动重置
  SetWaitableTimer(hTimerEvent, lpDueTime, lPeriod, nil, nil, False);
procedure TIntrThr.Execute;
begin  repeat
    if Terminated  then Break;
    if WaitForSingleObject(hTimerEvent,INFINITE) = WAIT_OBJECT_0 then     //如果信号不出现将一直等下去
    begin
      //do sth.
    end;
  until false;
end;