QWorker中分组作业的控制(TQJobGroup)

QWorker推出已经有一段时间了,现在我们来聊一下QWorker的作业分组。

在前面我们已经对QWorker的作业类型做了一个比较全面的描述(参见:QWorker的作业类型详解),大家可以发现,我们缺少一种机制,在投寄完多个作业后,能够知道它们都完成了,这种工作就交给了TQJobGroup。

TQJobGroup允许你做以下事情:

1、创建顺序执行的一组作业,在前一个作业完成后,自动执行后一个作业;

2、创建并行执行的一组作业,作业之间没有相互依赖关系 ;

3、等待作业执行完成,或者在作业全部执行完成时得到明确的通知;

4、支持作业等待超时,超时的作业将被取消。

在QWorkerDemo的演示程序,我们为TQJobGroup加入了很多演示的例子,大家具体可以看下。

下面说明下TQJobGroup的各个函数及属性的含义,以方便大家了解:

【函数】

 1、构造函数:支持一个AByOder参数,用于决定此组作业是顺序执行还是并行执行。

 2、析构函数:这个不用多说

 3、添加作业函数(Add):投寄一个异步执行的作业,这个作业只能是普通的异步作业,而不能是定时、延迟等类型的作业。添加作业的参数与TQWorkers的Post参数含义相同,就不再描述。

 4、准备添加作业函数(Prepare):Prepare通知TQJobGroup准备添加一组作业,在调用Run函数之前,这部分作业并不会被执行。

 5、运行准备好的作业(Run):运行前面准备要执行的作业,一个ATimeout参数指定超时设置,单位为毫秒,默认INFINITE代表一直等待。

 6、等待作业完成(WaitFor和MsgWaitFor):等待所有的作业执行完成,一个ATimeout参数指定超时设置,单位为毫秒,默认INFINITE代表一直等待。WaitFor和MsgWaitFor的不同在于后者不影响系统的消息处理,在主线程中执行时不会造成界面假死的问题,如果在后台线程中,实际调用的是WaitFor。

【属性】

1、作业数量(Count):组内未执行完的作业数量;

2、作业完成事件(AfterDone):作业执行完成时触发的事件;

3、按顺序执行(ByOrder):如果分组是顺序执行的,则返回True,否则返回False;

4、附加标签(Tag):用户指定的附加作业分组数据,具体意义由用户自己决定 。

5、自动释放(FreeAfterDone):是否在作业完成中自动释放作业分组对象

分享到: