gpt4 book ai didi

c++ - 线程消息之间的优先级?

转载 作者:行者123 更新时间:2023-11-28 08:16:21 25 4
gpt4 key购买 nike

虽然我是在 Borland C++ 应用程序的上下文中引用它,但这个问题既针对 Borland 又是通用的。

在 Borland C++ 项目中,我观察到用户与 GUI 的交互(比如单击菜单项)的优先级低于使用 Synchronize() 委托(delegate)给主线程的任务,即使用户交互正在发生几毫秒前。当主线程可用时,首先完成委托(delegate)任务,然后执行与用户交互对应的操作。工作线程将任务委托(delegate)给主线程并使用 Synchronize() 等待任务完成。所以我们可以把 Synchronize() 等同于 SendMessage()。

我相信用户交互在消息队列中作为消息排队,委托(delegate)任务也应如此。但是任务如何先执行呢?消息之间是否有优先级?

最佳答案

直到并包括 C++Builder 5,Synchronize()确实调用了SendMessage() .但在 C++Builder 6 中,Synchronize()被重写为不使用 SendMessage()不再(在 CLX 下支持 Linux)。请求现在放置在 FIFO 队列中,VCL 定期调用 CheckSynchronize()处理队列。尽管 CLX 早已死去,Synchronize()仍然使用相同的 FIFO 队列(多年来它得到了增强)。

除此之外,在 SendMessage() 的情况下被使用,它确实具有更高的优先级。用户交互将消息发布到主线程消息队列(又名 PostMessage() )。虽然SendMessage()直接转到窗口的 wndproc,如果由不同的线程发送(以前是 Synchronize() 的情况),直到接收窗口的拥有线程执行消息处理时才会调用它。待定 SendMessage()对主线程消息队列的请求比对同一队列的未决发布消息具有更高的优先级,因为在未决 SendMessage() 之前还有其他线程/进程被阻塞处理请求。

关于c++ - 线程消息之间的优先级?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7625807/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com