我需要在主线程的上下文中执行一些代码。我使用的是Lazarus + FPC。我从DLL(如果在Linux上则为共享库)内部的线程接收到一个事件,我的回调函数被调用。请注意,此函数不是任何类的成员,而是一个带有“cdecl”指令的独立传统函数。
我必须为我接收到的每个这样的消息触发相应的属性事件处理程序。并且这些事件必须在主线程的上下文中传递。我知道有两种解决方案:
1. PostMessage 2. Application.QueueAsyncCall
第一个解决方案可以,但它需要一个窗口句柄。由于这是库代码,因此没有句柄可用。AllocateHWND不是跨平台的选择。我知道我可以创建一个虚拟窗体,但这是一个非常糟糕的解决方案。
第二个解决方案可以正常工作,但我有一个问题,即调用直到我在应用程序内移动鼠标等操作才会被处理。也许我做错了什么,我不知道。就像我的调用只有在消息处理开始时才被处理一样。但这可能需要很长时间。
因此,我想知道最佳解决方案是什么(可能是QueueAsyncCall),以及如何确保我的消息(调用)在可接受的时间内被处理?
我必须为我接收到的每个这样的消息触发相应的属性事件处理程序。并且这些事件必须在主线程的上下文中传递。我知道有两种解决方案:
1. PostMessage 2. Application.QueueAsyncCall
第一个解决方案可以,但它需要一个窗口句柄。由于这是库代码,因此没有句柄可用。AllocateHWND不是跨平台的选择。我知道我可以创建一个虚拟窗体,但这是一个非常糟糕的解决方案。
第二个解决方案可以正常工作,但我有一个问题,即调用直到我在应用程序内移动鼠标等操作才会被处理。也许我做错了什么,我不知道。就像我的调用只有在消息处理开始时才被处理一样。但这可能需要很长时间。
因此,我想知道最佳解决方案是什么(可能是QueueAsyncCall),以及如何确保我的消息(调用)在可接受的时间内被处理?