[英]Creating Windows and Threading - C++
使用CreateEx
創建新窗口時,其代碼是在其自己的線程還是在其父線程(即在其實例化代碼所在的線程)中執行? 謝謝。
窗口實際上並不會單獨運行任何代碼,而是從消息循環中調用所有代碼,而消息循環是您自己的代碼的一部分。 嘗試通過多個線程與Windows UI交互時會遇到巨大的問題,因此您應始終在單個線程內響應消息。
Windows具有線程關聯性-有關此問題,請參閱Raymond Chen的文章 。
CreateWindowEx()不會創建新線程。 如果需要新線程,則必須調用_beginthreadex() (通常是首選方法)或CreateThread() 。
如果您想知道, _beginthreadex()
比CreateThread()
_beginthreadex()
更可取,因為前者初始化CRT的一部分而后者不初始化。
不,創建窗口不要啟動新線程
跨線程GUI的內容通常以災難告終。 Windows庫通過拋出異常來積極阻止它。
即使允許,CreateWindowEx默認也無法執行此操作,因為它將對您的代碼做出一些非常大的假設(鎖,線程安全性等); 而且大多數Windows開發可能仍基本上是單線程的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.