众所周知,当需要在 UI 线程和工作线程之间进行通信时,由于线程安全(句柄重构),必须创建一个隐藏窗口。
例如:
Form1
有 N 个动态创建TProgressBar
的实例,与后台运行的名称相同。- 始终保证
WM_REFRESH
只会在任务线程内调用。 Form1
有H : THandle property
分配以下程序:过程 RefreshStat(var Message: TMessage); 消息 WM_REFRESH;
在内部
RefreshStat
,如果只有 1 个后台线程,我可以轻松地使用参数来映射任务 ID 和位置L
。W
我不知道标题是否说明了我想知道的内容,但让我们想象一下,如果我们有一个运行多个后台任务的应用程序。
就我而言,我TProgressBar
用来报告完成的进度。
是否AllocateHwnd
保证所有消息在没有竞争条件的情况下到达隐藏窗口?
如果两个或多个任务同时发布消息会发生什么?
如果这需要手动控制,我想知道除了在自定义消息中创建另一个消息循环系统之外是否还有其他事情要做。
我希望这个问题足够清楚。