gpt4 book ai didi

Delphi - 如何防止应用程序在写入 LPT 端口时挂起

转载 作者:行者123 更新时间:2023-12-03 15:23:20 24 4
gpt4 key购买 nike

我有一个应用程序,可以直接在 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 以了解其他字段的默认值,然后再设置所需的字段。

关于Delphi - 如何防止应用程序在写入 LPT 端口时挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31049884/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com