QWorker 更新 – 新增 EnumJobStates 和 PeekJobState 函数用来获取作业状态

【更新内容】

1、EnumJobStates 函数用于枚举所有作业的状态,并返回一个作业状态的动态数组。

/// <summary>枚举所有的作业状态</summary>
/// <returns>返回作业状态列表</summary>
/// <remarks>在移动平台,如果使用了匿名函数作业过程,必需调用 ClearJobStates 函数来执行清理过程</remarks>
function EnumJobStates: TQJobStateArray;

2、PeekJobState 函数用于检查特定作业的状态,如果未找到该作业,则返回False。

/// <summary>获取指定作业的状态</summary>
/// <param name="AHandle">作业对象句柄</param>
/// <param name="AResult">作业对象状态</param>
/// <returns>如果指定的作业存在,则返回True,否则,返回False</returns>
/// <remarks>
/// 1.对于只执行一次的作业,在执行完后不复存在,所以也会返回false
/// 2.在移动平台,如果使用了匿名函数作业过程,必需调用 ClearJobState 函数来执行清理过程,以避免内存泄露。
/// </remarks>
function PeekJobState(AHandle: IntPtr; var AResult: TQJobState): Boolean;

TQJobState 结构用于记录作业的状态信息,其定义如下:

TQJobState = record
    Handle: IntPtr; // 作业对象句柄
    Proc: TQJobMethod; // 作业过程
    Flags: Integer; // 标志位
    IsRunning: Boolean; // 是否在运行中,如果为False,则作业处于队列中
    Runs: Integer; // 已经运行的次数
    EscapedTime: Int64; // 已经执行时间
    PushTime: Int64; // 入队时间
    PopTime: Int64; // 出队时间
    AvgTime: Int64; // 平均时间
    TotalTime: Int64; // 总执行时间
    MaxTime: Int64; // 最大执行时间
    MinTime: Int64; // 最小执行时间
    NextTime: Int64; // 重复作业的下次执行时间
  end;

注意:在移动平台使用这两个函数时,要注意调用相应的方法清理由于匿名函数而可能造成的引用问题。

其示例代码可以直接参考QWorkerDemo里的两个例子,效果如下:

EnumJobStats

【更新级别】

可选

分享到: