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、修正了多个在特定情形下,定时作业可能会产生不必要的延迟的问题。
【问题描述】
创建多个定时作业时,如果这多个作业触发的时间点重复,而这个作业处理时间较长时,会触发本问题。这是由于系统保留的工作者数量都被去用于处理作业,但却未及时雇佣新的工作者造成的。
【严重级别】
高
【更新级别】
立即更新
【特别感谢】
不好意思,这个问题我忘了那位群友报告,在此致歉兼致谢。

