Seb*_*nik 1 c winapi postmessage sendmessage
环境:Win32,C/C++
所有三个(3)都可以用于线程向main()发信号通知它已经完成了一个操作.
但哪一个是所有人中最快的信号?
嗯...
所有这三个选项都需要线程上下文切换来实际发送接收线程的信号.上下文切换的开销很可能会超过任何API中处理成本的任何差异.
选择可能最好由接收线程的性质驱动,例如它是UI线程,和/或它是否执行消息循环.也就是说,一些细节包括:
当接收线程是一个UI线程,在消息循环内搅拌时,SendMessage非常有用.发送线程将阻塞,直到收件人处理该消息.但它可能会在此期间处理未列明的消息.该逻辑可能会降低速度,因为可能涉及额外的上下文切换,使SendMessage成为三者中最慢的.
当收件人在消息循环中时,PostMessage也很有用.与SendMessage的不同之处在于它不会等待收件人处理消息,从而减少了开销.
当接收线程可以等待事件对象时,例如使用WaitForSingleObject(),SetEvent很有用.它不会产生编组或消息处理开销,并且可能比其他响应更快.