c - 哪个更快 : SetEvent, SendMessage, PostMessage

标签 c winapi sendmessage postmessage

环境:Win32,C/C++

例如,所有三 (3) 个线程都可以用于向 main() 发出信号,表明它已完成操作。

但是哪一个是所有信号中最快的?

嗯...

最佳答案

所有三个选项都需要一个线程上下文切换来实际向接收线程发出信号。上下文切换的开销很可能会超过任何 API 中处理成本的差异。

选择可能最好由接收线程的性质驱动,例如它是一个 UI 线程,和/或它是否执行消息循环。也就是说,一些细节包括:

  • SendMessage当接收线程是 UI 线程时很有用,在消息循环中搅动。发送线程将阻塞,直到接收方处理消息。但它可能会在那段时间处理未排队的消息。该逻辑可能会减慢速度,因为可能涉及额外的上下文切换,使 SendMessage 成为三者中最慢的。

  • PostMessage当收件人在消息循环中时也很有用。与 SendMessage 的不同之处在于它不等待接收方处理消息,因此产生的开销更少。

  • SetEvent当接收线程可以等待事件对象时很有用,例如与 WaitForSingleObject ().它不会产生编码(marshal)处理或消息处理开销,而且响应速度可能比其他方法更快。

关于c - 哪个更快 : SetEvent, SendMessage, PostMessage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1229011/

相关文章:

delphi - 为什么 COMMON_APPDATA 在 Windows XP 上返回为空字符串

c++ - Windows 信号量和 QSystemSemaphore

delphi - Delphi中GetLastError和FormatMessage的正确用法是什么?

c - 使用Xinput向竞赛游戏发送游戏 Controller 消息

c - 使用 fgets 和 sscanf 从 csv 文件读取时出现 EXC_BAD_ACCESS

c - 使用字符数组作为模块的输入来扫描 C 中的文件

c - 从指向 const 的指针中删除 const 是否遵循 C 中的严格别名,并引用同一个对象?

c - 如何在C中创建以用户名作为文件名的.txt?

c# - 如何使用 Textlocal API 发送短信?

javascript - 选项卡未聚焦时的 chrome.tabs.sendMessage