控制台程序线程莫名被阻塞

作者在Windows Server 2019运行控制台小程序时,程序莫名阻塞,敲回车恢复,最终发现是“快速编辑模式”所致。该模式下程序滚动内容时会挂起,用户操作后才继续。文中介绍手动设置和修改程序两种解决方法,还给出参考资料。

写了个控制台小程序,起线程通过UDP循环接收数据,在windows server2019执行,

发现运行一会儿就莫名阻塞,端口在正常监听,但是不收任何数据。

通过嗅探工具能发现数据到达端口,最后发现敲下回车就好了,推测是什么挂起了线程。

在windous7开发机上跑测试时,从来没有这种情况。

对比控制台窗口发现,win2019的窗口可以直接拖选操作,打开控制台窗口属性,

发现比win7多了很多选项,最后发现取消控制台窗口的“快速编辑模式”就好了。

win7下也有“快速编辑模式”只是默认不选,而win2019默认是选中的。

对此感觉很无语,从网上搜索相关资料,找到峡州仙士近期发的文章,供参考。

---------------------------下面是转载内容---shellching注--------------------------------------------------------

windows10 cmd命令提示符/批处理/终端 快速编辑模式bug 程序运行被阻塞 顶部标题栏提示选择 需要回车才能继续执行

为什么出现这种情况?

这是快速编辑模式的功能。当程序不断滚动控制台窗口的内容时,用户无法合理地选择文本。因此,控制台主机程序只是停止读取stdout/stderr输出,程序将挂起,直到用户完成操作。这可以更改,您需要关闭启用快速编辑模式选项。
请注意,这个“挂起”与程序以远高于控制台主机可以使用的速率生成stdout输出时得到的执行暂停没有本质区别。尽管这些延误是有限的。
而且这并不是用户停止程序的唯一方法,他也可以简单地按ctrl+s。按ctrl+q将再次恢复程序。

解决方法:(如果有其他方法,欢迎留言)

手动设置法

windows cmd->右键->属性->选项->编辑选项

单击左上角图标->属性->选项->编辑选项

取消 快速编辑模式

但是我将cmd设置之后,cmd是禁用了,但运行一个exe终端,发现它还是启动快速编辑模式

所以每个新exe都需手动设置。

修改程序法

windows bat

法一

头部输入以禁用

@echo off
reg add HKEY_CURRENT_USER\Console /v QuickEdit /t REG_DWORD /d 00000000 /f

REGEDIT

  • PRO:与任何常见的Windows系统兼容
  • CON:需要临时REG文件的创建
  • code(去你的脚本的开头):
if exist "%TEMP%\consoleSettingsBackup.reg" regedit /S "%TEMP%\consoleSettingsBackup.reg"&DEL /F /Q "%TEMP%\consoleSettingsBackup.reg"&goto :mainstart
regedit /S /e "%TEMP%\consoleSettingsBackup
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值