Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 多线程:事件驱动与消息驱动_Windows_Multithreading_Winapi_Message Queue - Fatal编程技术网

Windows 多线程:事件驱动与消息驱动

Windows 多线程:事件驱动与消息驱动,windows,multithreading,winapi,message-queue,Windows,Multithreading,Winapi,Message Queue,使用win32事件对象(CreateEvent)或线程窗口消息队列开发多线程时,性能是否存在差异。两者都应该使用某种等待。。。电话。 我自己的代码几乎完全基于事件,但如果不使用消息,可能会丢失一些东西。如果您担心线程消息和内核事件之间的性能差异,那么您可能不应该使用线程消息 Win32线程消息队列是最初为Windows 16开发的一种机制,当时没有线程。他们已经发展到可以处理Win32的线程模型,但在幕后他们是相当复杂的野兽 这有赞成的和反对的。缺点很简单,它们比其他形式的线程间同步和通信速度慢

使用win32事件对象(CreateEvent)或线程窗口消息队列开发多线程时,性能是否存在差异。两者都应该使用某种等待。。。电话。
我自己的代码几乎完全基于事件,但如果不使用消息,可能会丢失一些东西。

如果您担心线程消息和内核事件之间的性能差异,那么您可能不应该使用线程消息

Win32线程消息队列是最初为Windows 16开发的一种机制,当时没有线程。他们已经发展到可以处理Win32的线程模型,但在幕后他们是相当复杂的野兽

这有赞成的和反对的。缺点很简单,它们比其他形式的线程间同步和通信速度慢,并且有更多的限制。对于初学者来说,由于许多windows代码(MessageBox、DoDragDrop等)实现了模态消息循环,因此线程消息可能会丢失。重要的是不要使用那些来自要接收线程消息的线程的API。**1*在消息队列开始删除消息之前,消息队列的大小也有限制,并且线程消息API(GetMessage)不会导致线程进入可警报状态(因此不能使用QueueUserAPC)

线程消息的pro’s是——只要它们的限制得到尊重——它们是一个非常可靠的预制轮子,可以序列化对线程的调用。如果您发现自己为非UI工作线程实现了一种排队机制,那么为什么要重新发明一个经过良好测试的轮子呢?使用预先构建的消息队列

**1*这包括调试宏的大多数实现,如弹出消息框的断言