QWorker更新-增加枚举作业状态枚举函数等功能

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;

执行效果:

QWorker_EnumWorkerStatus

2、新增了一个后台低优先级的统计线程,每秒会检查一个CPU占用率,如果CPU占用率低于60%,且系统中有需要立即处理的作业时,会尝试触发新的工作者,以便尽快处理作业。

3、修正了多个在特定情形下,定时作业可能会产生不必要的延迟的问题。

【问题描述】

创建多个定时作业时,如果这多个作业触发的时间点重复,而这个作业处理时间较长时,会触发本问题。这是由于系统保留的工作者数量都被去用于处理作业,但却未及时雇佣新的工作者造成的。

【严重级别】

【更新级别】

立即更新

【特别感谢】

不好意思,这个问题我忘了那位群友报告,在此致歉兼致谢。

分享到: