gpt4 book ai didi

windows - 多线程:事件驱动与消息驱动

转载 作者:可可西里 更新时间:2023-11-01 09:22:27 27 4
gpt4 key购买 nike

用 win32 事件对象(CreateEvent)或线程窗口消息队列开发多线程时,性能有差异吗?两者都应该使用某种 WaitFor... 调用。我自己的代码几乎完全基于事件,但如果不使用消息,我可能会丢失一些东西。

最佳答案

如果您担心线程消息和内核事件之间的性能差异,那么您可能不应该使用线程消息。

Win32 线程消息队列是一种最初为 Windows 16 开发的机制——当时还没有线程。它们已经发展到可以处理 Win32 的线程模型,但在幕后它们是相当复杂的野兽。

这有利也有弊。缺点是,很简单,它们比其他形式的线程间同步和通信更慢,并且有更多限制。对于初学者来说,因为很多 Windows 代码片段(MessageBox、DoDragDrop 等)实现了模态消息循环 - 很多时候线程消息可能会丢失。重要的是不要使用来自线程的那些旨在接收线程消息的 API。**1* 在开始丢弃消息之前,消息队列的大小也有限制,并且线程消息传递 API (GetMessage) 不会导致线程进入可警报状态(因此您不能使用 QueueUserAPC)。

线程消息的优点是——只要遵守它们的限制——它们是一个非常可靠的预制轮子,可以序列化对线程的调用。如果您发现自己正在为非 UI 工作线程实现队列机制,为什么要重新发明一个经过良好测试的轮子 - 使用预构建的消息队列。

**1* 这包括大多数调试宏的实现,例如将弹出消息框的 ASSERT。

关于windows - 多线程:事件驱动与消息驱动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1887451/

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