2013-01-23 128 views
-1

當使用循環(特別是在c + +)時,他們都創建自己的線程?如果不是哪個循環創建它們自己的線程,而不是哪個循環在其存在期間控制主線程的執行?循環和線程創建

編輯:怎麼樣的消息循環連續運行,它是如何在程序中存在不會阻止任何消息循環後執行,因爲它是一個連續循環?

+1

只有在明確地製作新線程時纔會創建新線程。 C++程序默認爲單線程。 –

回答

1

循環,例如for -loops和while -loops永遠不會創建線程。主線程(或代碼中某處啓動的任何其他線程)可以進入一個循環,就像它可以執行代碼的所有其他部分一樣,但是由於進入循環而永遠不會啓動新線程。

有一些特殊的庫提供可以以類似於循環的方式使用的模板,例如, parallel_for。那些將會啓動線程(或類似類型的並行),但這些實際上是功能模板(或類模板),而不是語言標準定義的循環語句。評論後

編輯:
在你是指在下面的評論消息循環的specific example,這個想法是,窗口(其中反應以從單獨的線程來事件)以及可能的各種其它線程之前創建主線程進入循環。然後循環運行,直到接收到WM_QUIT消息,導致GetMessage返回布爾值false的等效值。

因此,循環運行在主線程中,但它接收的消息由單獨的線程生成,在進入循環之前創建並啓動(由系統或由您)。

+0

如果循環沒有創建新線程,那麼消息循環如何運行,但不會停止執行程序? – user1958850

+0

這是什麼消息循環?你在談論任何特定的代碼? (&Message);' '}'http://msdn.microsoft.com/ – jogojapan

+0

'while(GetMessage(&messages,NULL,0,0))' '{' 'TranslateMessage(&messages);' ''DispatchMessage en-us/library/windows/desktop/ms644928%28v = vs.85%29.aspx#creating_loop – user1958850