Windows 多线程:事件驱动与消息驱动
使用win32事件对象(CreateEvent)或线程窗口消息队列开发多线程时,性能是否存在差异。两者都应该使用某种等待。。。电话。Windows 多线程:事件驱动与消息驱动,windows,multithreading,winapi,message-queue,Windows,Multithreading,Winapi,Message Queue,使用win32事件对象(CreateEvent)或线程窗口消息队列开发多线程时,性能是否存在差异。两者都应该使用某种等待。。。电话。 我自己的代码几乎完全基于事件,但如果不使用消息,可能会丢失一些东西。如果您担心线程消息和内核事件之间的性能差异,那么您可能不应该使用线程消息 Win32线程消息队列是最初为Windows 16开发的一种机制,当时没有线程。他们已经发展到可以处理Win32的线程模型,但在幕后他们是相当复杂的野兽 这有赞成的和反对的。缺点很简单,它们比其他形式的线程间同步和通信速度慢
我自己的代码几乎完全基于事件,但如果不使用消息,可能会丢失一些东西。如果您担心线程消息和内核事件之间的性能差异,那么您可能不应该使用线程消息 Win32线程消息队列是最初为Windows 16开发的一种机制,当时没有线程。他们已经发展到可以处理Win32的线程模型,但在幕后他们是相当复杂的野兽 这有赞成的和反对的。缺点很简单,它们比其他形式的线程间同步和通信速度慢,并且有更多的限制。对于初学者来说,由于许多windows代码(MessageBox、DoDragDrop等)实现了模态消息循环,因此线程消息可能会丢失。重要的是不要使用那些来自要接收线程消息的线程的API。**1*在消息队列开始删除消息之前,消息队列的大小也有限制,并且线程消息API(GetMessage)不会导致线程进入可警报状态(因此不能使用QueueUserAPC) 线程消息的pro’s是——只要它们的限制得到尊重——它们是一个非常可靠的预制轮子,可以序列化对线程的调用。如果您发现自己为非UI工作线程实现了一种排队机制,那么为什么要重新发明一个经过良好测试的轮子呢?使用预先构建的消息队列 **1*这包括调试宏的大多数实现,如弹出消息框的断言