QWorker自定义作业数据指针释放方法

QWorker今天的更新加入jdfFreeAsC1~C6是为了应对C++中丰富的内存分配和管理方式,提供了6种自定的的处理方式供用户选择。当然Delphi你要自己去管理一些东西,也一样可以用,比如将Data指向一个池中的对象,然后在释放时返回到池中。下面的例子写的是针对C++的,如new/delete,new[]/de

QWorker信号作业处理详解

QWorker的信号作业是一个可以说是很好玩的特色功能,它可以让你做出很好的松散耦合的程序,而松散耦合是软件设计过程中,被人推崇的一种设计模式。 为什么说QWorker的信号作业是松散耦合的呢?因为它具体以下特点: 1、信号的触发者根本就不知道有没有关注这个信号,它的任务就是触发这个信号而已; 2、信号的响应者根本就不

如何使用QWorker控制工作流

要想使用QWorker控制工作流,实际上很容易。 首先,我们将工作流中的每个结点做为一个作业来考虑。 其次,作业之间的工作流控制,我们通过信号类作业来完成。 在作业完成后,触发一个信号,而在这个信号的响应函数中,去处理前置条件的检查,如果符合条件,就启动响应作业处理逻辑,否则,忽略,也就实现了工作流的控制。

QWorker-不仅仅是一个线程池

    首先,我们承认QWorker是一个线程池,毕竟它的每个工作者一就是一个线程。     其次,QWorker不仅仅是一个线程池,这意味着它做的工作远远超过线程池的管理,而且牵涉到完整的作业调度。QWorker基于作业的视角,让其功能变得与众不同。     从作业的视角来看,我们模拟一个场景:     1、你安排你

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

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

QWorker的作业类型详解

   QWorker最近很受群友的关注,因此单独将其中的作业类型详细拿出来说明下。    QWorker的按照不同的标准,可将作业类型分为不同的类型:    1、按触发方式分    按照触发方式可以分为手工投寄、定时重复和信号触发三种方式。顾名思义,手工投寄作业用户投寄一次就只运行一次,如果需要,就由用户手工重复投寄。

经验谈:分析问题时避免陷入细节陷阱

    我们周围的每个人都是不同的,每件事都有其特别之处,但在我们分析和解决问题时,只突出差异,忽略其共性,往往会造成问题越分析越复杂,最后就如同线团一样,将自己绕在中间,迷糊之间自己已经晕头转向,问题也就往往无解了。     而实际上,分析问题的方法有很多种,有自上向下的瀑布法则,也有自下向上的统计法则,当年在陷入具

QWorker技巧之如何向等待信号处理作业传递参数

QWorker支持信号类型的作业,你可以通过触发某个信号,来让监听此信号的作业处理代码进行某些处理。关于这方面的详细说明,参考文章:QWorker信号作业处理详解。 由于信号作业需要分为信号注册和触发两个阶段,那么要传递参数时机是什么时候呢?QWorker约定是在触发信号的Singal函数中,提供一个无类型指针ADat

QWorker与现实的原理映射

QWorker基于作业管理,整个管理体系实际与现实中形成很强的对应关系: 1、TQJob相当于用户交付的任务,TQWorker对应于工人,TQWorkers对应于包工头; 2、包工头,雇了两个长工,剩下的工人都是打短工的; 3、用户将任务(作业)交给包工头,并告诉他要求,包工头看长工是否有空,有则长工就直接处理了,如果

QWorker不要在主窗体OnDestroy里投寄异步作业

原因很简单: 1、投寄的作业可能根本不会执行到,所以没有意义; 2、作业如果不幸投寄到主线程去执行,那么,执行时,主窗体可能已经被释放,如果你的作业访问了相应的内容,那么,好一点是什么不会发生,不好的话,说不定会发生什么神奇的事情。 另外补充提醒下: 不要在Destroy里投寄与自己相关的作业,当执行时,都死透透了,问