【问题标题】:Invoking/Executing a function AFTER caller function finished or returned in FMX or System Library在 FMX 或系统库中完成或返回调用函数后调用/执行函数
【发布时间】:2020-01-17 17:50:22
【问题描述】:

TMessageManager 的“SendMessage”方法调用“订阅”(或关联的回调)函数调用“SendMessage”的函数完成后。

对于此问题的可用解决方案,我正在考虑使用 TTimer 以尽可能短的时间间隔(即 1 毫秒),以便当您在调用方函数中启用计时器时,必须触发 TTimer 的 OnTimer 事件AFTER 启用它的功能。我认为这是解决此问题的一种“缓慢”且丑陋的解决方法。

FMX 或系统库中是否有任何应用程序范围的消息传递工具可以在调用函数完成或返回后调用回调函数? (它们之间处理/调用的其他应用程序消息也可以)顺便说一下,这是用于 FMX 或多设备跨平台开发的。不特定于 VCL 或 Windows 环境。

(我真正想要的是能够向自己的应用程序发送消息,类似于 Windows API 函数 PostMessage 的行为方式。PostMessage 发送的消息在 PostMessage 函数返回后从 Windows 过程回调函数中出现。)

【问题讨论】:

    标签: delphi firemonkey c++builder


    【解决方案1】:

    TMessageManager.SendMessage() 是同步的。对于异步发送,如果您从工作线程发布消息,请查看 TThread.Queue(),如果您从主 UI 线程发布消息,请查看 TThread.ForceQueue()

    【讨论】:

    • 谢谢,它在主线程上使用 TThread::ForceQueue 方法工作。我使用了 TThread::ForceQueue (0, pMyObj->ForceQueueOut);在我的类中触发函数和函数实现的代码行是: void __fastcall MyClass::ForceQueueOut() { /* ... */ }
    猜你喜欢
    • 2018-10-30
    • 2020-07-28
    • 2020-01-31
    • 2014-06-10
    • 1970-01-01
    • 2021-08-02
    • 1970-01-01
    • 2017-10-05
    • 1970-01-01
    相关资源
    最近更新 更多