2013-03-27 50 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来查看用户是否选择了文本,并可能警告它们或采取其他措施。

相关问题