环境: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/