可复用的线程处理器设计

  最近,由于在 MFC 和C#项目中,都需要做很复杂的数据处理模块。一般耗时操作都需要封装到线程中去。由于模块很多,为每个模块编写“线程处理器”是一个繁重的工作。于是,我整理下通常模式下的需求,写个可以复用的线程处理模块,我称它——线程处理器。下面的

文章我用MFC来描述,类似的C#基类,我会把源码奉上。

  好了,言归正传。我们看下面一个需求:

   1  一个串口数据采集模块。

   附带说一句,有的人把线程数据采集的线程驱动工作模块。这通常不会出什么问题。但如果碰到串口数据比较    多,而且工作模块耗时操作比较大。又或者是,多个串口同时采集。可能会造成串口数据无法及时取出,造成数据的丢失。所以,我觉得一个好的设计,是单独为线程设置一个采集线程。采集的数据添加到一个队列中。而工作模块也设计一个工作线程,然后再从队列中取出数据去处理。这样的模块划分才是正确的。

  再回到串口数据的采集模块。需要一个线程不停采集数据。间隔时间,这个自己可以定。那么我们需要的是一个这样的模块:

  间隔一定时间,去做一件事情。如果用户暂停,则等待。如果用户回复,则恢复工作。需要有可靠的启动和停止机制。一个工作者,间隔固

  定时间去做一件事情。

  我们再看另一个需求:

  2 一个工作模块,等待用户发一个指令。然后再去处理数据。一个工作者,但只是在用户需要他工作时,才去工作。

  3 由于MFC下的线程,同时也是一个消息的接收者,因此,必须考虑消息到来时,线程能处理消息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值