Delphi/C++ Builder XE7版新引入了System.Threading单元来加入并行编程支持,而QWorker却是从作业(Job)的视角,面向作业和工作者(Worker)提供编程支持,同时QWorker也同时提供了TQForJobs来支持For并行编程支持。
在QWorker里,我们将要处理的任务当做一个作业,将处理资源(线程)当作工作者,业务模型也就更简单。由于视角的不同,也为QWorker和系统的System.Threading带来一些不同:
QWorker自动创建了一个全局的Workers对象,来提供给其它模块,从而简化了调度器的创建过程,只需要此入QWorker单元就可以直接使用。
QWorker从作业管理的角度,提供了简单普通作业和周期性作业投寄函数(Post)、延迟作业(Delay)、定时作业(At)、信号(Signal)的管理,而XE7提供的System.Threading还是从传统的MP编程模型,接口复杂,用起来并不够简单。
QWorker同时提供了TQJobGroup来提供一组作业之间的串行化和同步,使用起来相当方便,一个简单的例子:
var AGroup:TQJobGroup; begin AGroup:=TQJobGroup.Create(True); AGroup.Prepare; AGroup.Add(DoFirstJobStep,Pointer(1),false); AGroup.Add(DoSecondJobStep,nil,true); AGroup.Run; AGroup.WaitFor; FreeObject(AGroup); end