zoukankan      html  css  js  c++  java
  • FMX中实现PostMessage的方法

    首先,做为一个从Windows下转过来的开发人员,许多时候,我们喜欢用PostMessage来触发一些异步执行的代码,但遗憾的是,FMX做为EMB的跨平台库的基础,只提供了SendMessage方法,却没有提供PostMessage方法。
    那我们确实需要PostMessage怎么办?我因为用到了,所以研究了下,编写了一个fmx.postqueue单元,提供了一个类似的PostMessage方法,供大家参考。此代码可以运行在跨平台环境下,所以你可以放心在Windows、Andriod、iOS、OSX中使用。

    第一步:我不喜欢消息映射的方式,所以直接PostMessage的定义我改了一下,让其更简单易用。

    首先是一个消息响应过程,如果你将所有的异步消息响应过程都投寄到同一个函数,那基本上就是Windows上的PostMessage函数的翻版了,你只能在回调函数中根据消息ID挨个处理了。

    TPostProcedure提供了四个参数:

    ASender  : 消息的发送者,如果不需要,可以传递为nil/NULL。

    AMsgId : 消息ID,一个整数值,如果不需要区分,直接赋0就好了。

    AWParam : 一个附加的参数,具体由程序自己决定,和Windows下消息的WParam参数一样。

    ALParam : 同上

    接口就是这么一个简单的定义了,用时直接在后台线程或主线程中PostMessage就可以,这个函数是线程安全的。

    第二步:我来详细说明下这个函数的实现原理。

    1、自己建立一个内部列表,用来存贮投寄来的消息。

    2、注册一个用于响应TIdleMessage消息的回调函数,在其中处理这些异步消息的响应。

    3、在投寄消息时,将消息加入到内部列表,然后如果定义了WakeMainThread函数,就调用WakeMainThread函数,从而激活主线程的消息循环,用于处理异步消息。

    基本的思路就是这个样子,而后面实际还注册了退出过程,用来清理自身,防止内存泄露。

    【下载链接】

    百度网盘

    http://blog.qdac.cc/?p=1090

  • 相关阅读:
    python 并发编程 多线程 event
    python 并发编程 多线程 定时器
    python 并发编程 多线程 信号量
    linux top 查看CPU命令
    python 并发编程 多线程 GIL与多线程
    python 并发编程 多线程 死锁现象与递归锁
    python 并发编程 多线程 GIL与Lock
    python GIL全局解释器锁与互斥锁 目录
    python 并发编程 多线程 GIL全局解释器锁基本概念
    执行python程序 出现三部曲
  • 原文地址:https://www.cnblogs.com/findumars/p/5482257.html
Copyright © 2011-2022 走看看