一种线程消息驱动及RTTI分发操作

最近一个手头的一个软件升级,原来的线程设计由于经验不足,导致了诸如无法重连、数据传递实现复杂等问题,近段时间的开发积累的一些经验,和大家一并分享。

为什么要线程消息驱动?
1)Thread插入主线程运行最致命的问题是必须调用一个无参数procedure,这对操作带来了很大的麻烦,通常执行一个操作很容易的想到带会一些信息返回。例如网络请求的返回。
2)更符合编程习惯,由于Thread的Synchronize是插入主线程运行。导致主线程的一部分代码必须public开放给外部来调用,而分发消息的机制更适合屏蔽外部接口(只依赖一个统一的消息分发入口,非直接调用对应的操作)。
3)消息驱动能够实现简单的操作队列
由于WINDOWS消息为队列形式,因此能够实现单线程的任务排队。典型的如记录日志的操作,向日志线程发送消息来依次处理,避免了并发写文件的问题和线程同步的问题,提交了写入效率,让编程更加简单

接下来要介绍几个关键信息(如需要更详细资料直接GOOGLE搜索,容易找到):
RTTI及{$M+}{$M-}: M开关打开published property的RTTI开关,实现类似反射的调用来请求类方法,避免分支过多的IF...ELSE
PostThreadMessage: WINDOWS API线程消息通讯方法,提供主线程与子线程,子线程之间的通讯,导入单元windows
AllocMem, FreeMemory: 为字符串消息分配内存,释放存储
GetPropInfo: 获得类published property的RTTI信息
SetOrdProp: RTTI方式调用published property的write方法写入WORD值

接下来是线程基类的实现:
 

一个继承的子线程类,接受主线程消息并执行:


主线程Form的实现,接受子线程的消息:



截图



示例下载:
http://download.csdn.net/source/2824731

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值