當使用循環(特別是在c + +)時,他們都創建自己的線程?如果不是哪個循環創建它們自己的線程,而不是哪個循環在其存在期間控制主線程的執行?循環和線程創建
編輯:怎麼樣的消息循環連續運行,它是如何在程序中存在不會阻止任何消息循環後執行,因爲它是一個連續循環?
當使用循環(特別是在c + +)時,他們都創建自己的線程?如果不是哪個循環創建它們自己的線程,而不是哪個循環在其存在期間控制主線程的執行?循環和線程創建
編輯:怎麼樣的消息循環連續運行,它是如何在程序中存在不會阻止任何消息循環後執行,因爲它是一個連續循環?
循環,例如for
-loops和while
-loops永遠不會創建線程。主線程(或代碼中某處啓動的任何其他線程)可以進入一個循環,就像它可以執行代碼的所有其他部分一樣,但是由於進入循環而永遠不會啓動新線程。
有一些特殊的庫提供可以以類似於循環的方式使用的模板,例如, parallel_for
。那些將會啓動線程(或類似類型的並行),但這些實際上是功能模板(或類模板),而不是語言標準定義的循環語句。評論後
編輯:
在你是指在下面的評論消息循環的specific example,這個想法是,窗口(其中反應以從單獨的線程來事件)以及可能的各種其它線程之前創建主線程進入循環。然後循環運行,直到接收到WM_QUIT
消息,導致GetMessage
返回布爾值false
的等效值。
因此,循環運行在主線程中,但它接收的消息由單獨的線程生成,在進入循環之前創建並啓動(由系統或由您)。
如果循環沒有創建新線程,那麼消息循環如何運行,但不會停止執行程序? – user1958850
這是什麼消息循環?你在談論任何特定的代碼? (&Message);' '}'http://msdn.microsoft.com/ – jogojapan
'while(GetMessage(&messages,NULL,0,0))' '{' 'TranslateMessage(&messages);' ''DispatchMessage en-us/library/windows/desktop/ms644928%28v = vs.85%29.aspx#creating_loop – user1958850
只有在明確地製作新線程時纔會創建新線程。 C++程序默認爲單線程。 –