最近一个手头的一个软件升级,原来的线程设计由于经验不足,导致了诸如无法重连、数据传递实现复杂等问题,近段时间的开发积累的一些经验,和大家一并分享。
为什么要线程消息驱动?
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
一种线程消息驱动及RTTI分发操作
最新推荐文章于 2024-01-13 01:43:40 发布