3

Windows でコマンド ラインからプログラムを実行している場合、Mark モードに入ると、プログラムの出力が一時停止し、必要なものをコピーしてからプログラムの実行を続行するための十分な時間が与えられます。

これは出力ストリームを一時停止しただけで、プログラムは関係なく続行したと常に思っていました。ただし、プログラムも「一時停止」しているように見えることがわかりました(または、少なくともソケットを介した通信を妨げています)。

私の質問は次のとおりです。この「一時停止」は実際に何を伴いますか? どのスレッドが中断されていますか? 子プロセスは中断されていますか (私はそうではないと思います)? たとえば、Java コードを実行している場合、JVM 全体が中断されますか、それともメイン スレッドだけですか? Windowsは実際にこれをどのように処理しますか?

これが質問として少し自由回答かもしれないことをお詫びしますが、QuickEdit モードをオンにすると、重要なプログラムにどのようなリスクがあるかを知りたいです!

前もって感謝します

4

1 に答える 1

1

コンソール ウィンドウでテキストを選択すると、標準出力パイプがブロックされます。これは、スレッドが標準出力に書き込もうとすると、パイプ内のすべてのデータが読み取られ、すべてが再び動き始めるまでブロックされることを意味します。

これにより、他のスレッドや子プロセスがブロックされることはありません。

GetConsoleSelectionInfoを使用して、ユーザーがテキストを選択したかどうかを確認し、場合によっては警告したり、他のアクションを実行したりできます。

于 2013-08-14T21:17:55.280 に答える