2013-03-27 45 views
3

在Windows中從命令行運行程序時,如果進入標記模式,則程序輸出暫停,給您足夠的時間來複制所需的任何內容,然後繼續執行程序。通過命令行編輯>標記暫停程序時發生了什麼?

我總是認爲這只是暫停了輸出流,並且程序繼續後面不管。但是,我發現它似乎也會'暫停'程序(或至少阻止它通過套接字進行通信)。

我的問題是:這個「暫停」究竟是什麼引起的?哪些線程被暫停?子進程是否被暫停(我猜不是)?例如,如果運行Java代碼,整個JVM是掛起的,還是僅僅是主線程? Windows如何處理這個問題?

我很抱歉,如果這可能是一個開放式的小問題,但QuickEdit模式打開,我想知道關鍵程序有什麼風險!

在此先感謝

+0

您確定通過套接字進行通信的線程不是*還*試圖寫入控制檯嗎? – 2013-03-27 09:53:18

+0

所有日誌記錄都使用NLog進行處理,並且在相關程序中沒有任何直接控制檯訪問。假設Nlog在一個單獨的線程上運行,那麼這會影響它。 – 2013-03-27 09:55:59

+0

這聽起來像是你應該驗證的假設。我會嘗試寫一個簡短但完整的程序來演示問題...... – 2013-03-27 09:56:44

回答

1

在控制檯窗口中選擇文本將阻止標準輸出管道。這意味着當一個線程試圖寫入標準輸出時,它也會阻塞,直到讀取到管道中的所有數據,並且所有事情再次開始移動。

這是的不是阻止任何其他線程或子進程。

您可以使用GetConsoleSelectionInfo來查看用戶是否選擇了文本,並可能警告它們或採取其他措施。

相關問題