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):是否在作业完成中自动释放作业分组对象