當使用win32事件對象(CreateEvent)或線程窗口消息隊列開發多線程時,性能是否有所不同。兩者都應該使用某種WaitFor ...調用。 我自己的代碼幾乎完全基於事件,但也許我在不使用消息時會丟失一些東西。多線程:事件驅動與消息驅動
3
A
回答
4
如果您擔心線程消息和內核事件之間的性能差異,那麼您應該不使用線程消息。
Win32線程消息隊列是最初爲Windows 16開發的機制 - 當沒有線程時。他們已經成長爲處理Win32的線程模型,但在它們的封面下它們是相當複雜的野獸。
這有pro和con的。缺點是,很簡單,它們比其他形式的線程間同步和通信慢,並且有更多的限制。對於初學者來說,因爲許多windows代碼(MessageBox,DoDragDrop等)實現了模態消息循環 - 有很多時候線程消息可能會丟失。重要的是不要使用那些意味着要接收線程消息的線程的API。** 1 *在消息隊列開始刪除消息之前,消息隊列的大小也有限制,並且線程消息API(GetMessage)不會導致線程進入可警告狀態(所以你不能使用QueueUserAPC)。
線程消息的pro' - 只要它們的限制被尊重 - 它們是一個非常可靠的預製輪,可以將調用序列化爲線程。如果你發現自己實現了一個非UI工作線程的排隊機制,爲什麼要重新發明一個經過良好測試的輪子 - 使用預先構建的消息隊列。
** 1 *這包括調試宏的大部分實現,如ASSERT,將彈出一個消息框。
相關問題
- 1. 消息驅動與應用程序集成的事件驅動方法
- 2. 消息驅動豆消息
- 3. 事件驅動的編程:回調與消息輪詢
- 4. 事件驅動的線程創建
- 5. RxJava是事件驅動的。它不應該是消息驅動嗎?
- 6. 使用NDIS驅動程序的自定義事件消息
- 7. 注入消息驅動bean
- 8. 數據驅動的編程/事件驅動編程
- 9. Datastax Cassandra Java驅動程序WARN消息
- 10. 消息驅動bean與activemq消息消費
- 11. 消息驅動豆 - 單總線,多激活規格
- 12. 在消息驅動Bean(MDB)中產生新的Java線程
- 13. 協程VS事件驅動編程
- 14. 由於兩個事件而產生消息驅動bean'fire'?
- 15. 消息驅動Bean中的事件不起作用
- 16. 事件驅動的消息路由和隱藏實現
- 17. 是反應流消息還是事件驅動?
- 18. 事件驅動與輪詢/計劃
- 19. Selenium遠程驅動程序與HtmlUnit驅動程序問題
- 20. 事件驅動的主題
- 21. 是nodeJs事件驅動?
- 22. NiFi-1.0.0 - ExecuteSQL,事件驅動
- 23. Java + Flash =>事件驅動?
- 24. 事件驅動的設計流程
- 25. Java和事件驅動編程
- 26. PL/SQL中的事件驅動編程
- 27. 事件驅動的編程 - node.js,Java
- 28. 域驅動的編程和事件
- 29. 事件驅動架構/編程
- 30. 事件驅動的MVC應用程序