QWorker技巧之作业与主线程之间通讯

作业一般在后台线程中进行,但当其需要和主线程交互时,有多种方法可以完成,这里列出常见的3种:

1、直接使用一个在主线程执行的新的作业,然后将参数做为Data传递到新的作业中。至于参数Data的内容,则不在讨论之列。但这种方式不会等待新投寄的作业完成(实际上绝大多数情况下我们应尽量避免长时间占用工作者资源,为其它工作者留出资源来执行更多作业),要想等待作业完成,需要使用TQJobGroup,它实现了Wait方法来等待作业完成或被取消。

2、直接使用PostMessage或SendMessage等消息来与主线程通讯,参数通过消息的WParam和LParam来传递,但这只适用于Windows的VCL平台。

3、使用PQJob的Worker.Synchronize函数,这个方法实际上就是线程的同步调用方法,会等待主线程函数执行完成后才能继续下一步。

【推荐】

推荐采用第一种的异步方式,因为作业这可以最大化工作者的工作负荷,提高运行效率。而且这种分步骤的作业之间,通过Data成员,可以很容易的分享数据。

分享到: