QWorker今天更新了几个更新的功能:
1、新增了一个EnumWorkerStatus函数来枚举所有工作者的状态,方便你了解每个作业函数在忙啥。在程序发生死锁时,方便你找到死锁的地方。
下面是调用的示例代码:
procedure TForm1.Button32Click(Sender: TObject); var AStatus:TQWorkerStatus; I: Integer; S:String; begin AStatus:=Workers.EnumWorkerStatus; for I := Low(AStatus) to High(AStatus) do begin S:=S+'【工作者 '+IntToStr(I)+'(ID='+IntToStr(AStatus[I].ThreadId)+')】'#13#10+ ' 已处理:'+IntToStr(AStatus[I].Processed)+' 状态:'; if AStatus[I].IsIdle then S:=S+'空闲'#13#10#13#10 else begin S:=S+'忙碌(作业:'+AStatus[I].ActiveJob+')'#13#10; if Length(AStatus[I].Stacks)>0 then S:=S+' 堆栈:'#13#10+AStatus[I].Stacks+#13#10#13#10 else S:=S+#13#10; end; end; ShowMessage(S); end;
执行效果:
2、新增了一个后台低优先级的统计线程,每秒会检查一个CPU占用率,如果CPU占用率低于60%,且系统中有需要立即处理的作业时,会尝试触发新的工作者,以便尽快处理作业。
3、修正了多个在特定情形下,定时作业可能会产生不必要的延迟的问题。
【问题描述】
创建多个定时作业时,如果这多个作业触发的时间点重复,而这个作业处理时间较长时,会触发本问题。这是由于系统保留的工作者数量都被去用于处理作业,但却未及时雇佣新的工作者造成的。
【严重级别】
高
【更新级别】
立即更新
【特别感谢】
不好意思,这个问题我忘了那位群友报告,在此致歉兼致谢。