哪个更快:SetEvent,SendMessage,PostMessage

Seb*_*nik 1 c winapi postmessage sendmessage

环境:Win32,C/C++

所有三个(3)都可以用于线程向main()发信号通知它已经完成了一个操作.

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

嗯...

Ore*_*ner 6

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

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

  • 当接收线程是一个UI线程,在消息循环内搅拌时,SendMessage非常有用.发送线程将阻塞,直到收件人处理该消息.但它可能会在此期间处理未列明的消息.该逻辑可能会降低速度,因为可能涉及额外的上下文切换,使SendMessage成为三者中最慢的.

  • 当收件人在消息循环中时,PostMessage也很有用.与SendMessage的不同之处在于它不会等待收件人处理消息,从而减少了开销.

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