Delphi – 如何在写入LPT端口时阻止应用程序挂起
发布时间:2020-12-15 09:21:19 所属栏目:大数据 来源:网络整理
导读:我有一个应用程序,它直接在LPT1端口上将命令写入某些专用打印机.代码如下所示: AssignFile(t,'LPT1');Rewrite(t);Write(t,#27 + '@'); // initializeSleep(50); // avoid buffer fillWrite(t,#27#32 + Chr(0)); // set default font... 问题是,当打印机没有
我有一个应用程序,它直接在LPT1端口上将命令写入某些专用打印机.代码如下所示:
AssignFile(t,'LPT1'); Rewrite(t); Write(t,#27 + '@'); // initialize Sleep(50); // avoid buffer fill Write(t,#27#32 + Chr(0)); // set default font ... 问题是,当打印机没有连接到端口时,第一个Write指令不会执行任何操作,它只是挂起并且整个线程都被锁定. 有没有办法为这些指令定义超时,或者你能推荐另一个可以完成这项工作的库吗?如果它具有类似于Delphi中的Write函数,那将是很好的,因为使用这种方法的代码量非常大,并且很难改变所有代码. 解决方法
您可以使用SetCommTimeouts配置打印机句柄的超时.要从TextFile变量获取句柄,请将其类型转换为TTextRec并读取Handle字段:
var CommTimeouts: TCommTimeouts; CommTimeouts.WriteTotalTimeoutConstant := DesiredTimeout; Win32Check(SetCommTimeouts(TTextRec(t).Handle,CommTimeouts)); 在设置所需字段之前,您可能希望首先调用GetCommTimeouts以发现其他字段的默认值. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |