簡體   English   中英

創建Windows和線程-C ++

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM