我有一个应用程序,它直接在LPT1端口上将命令写入某些专用打印机.代码如下所示:
AssignFile(t, 'LPT1');
Rewrite(t);
Write(t,#27 + '@'); // initialize
Sleep(50); // avoid buffer fill
Write(t,#27#32 + Chr(0)); // set default font
...
Run Code Online (Sandbox Code Playgroud)
问题是,当打印机没有连接到端口时,第一个Write指令不执行任何操作,它只是挂起并且整个线程都被锁定.
有没有办法为这些指令定义超时,或者你能推荐另一个可以完成这项工作的库吗?如果它具有类似于Delphi中的Write函数,那将是很好的,因为使用这种方法的代码量非常大,并且很难改变所有代码.
您可以使用SetCommTimeouts配置打印机句柄的超时.要从TextFile变量中获取句柄,请将其输入TTextRec并读取Handle字段:
var
CommTimeouts: TCommTimeouts;
CommTimeouts.WriteTotalTimeoutConstant := DesiredTimeout;
Win32Check(SetCommTimeouts(TTextRec(t).Handle, CommTimeouts));
Run Code Online (Sandbox Code Playgroud)
GetCommTimeouts在设置所需字段之前,您可能希望先调用其他字段的默认值.
| 归档时间: |
|
| 查看次数: |
464 次 |
| 最近记录: |