4

我有一个简单的应用程序,它应该每分钟向串行端口发送一个字节。但有时,出于某种奇怪的原因,它会在 WriteFile() 函数的某个位置冻结。sw 和 hw 流量控制均已关闭。我已经搜索了一些关于从另一个线程执行的挂起读取操作的内容,但我相信这不是问题,因为我的应用程序有单线程。此外,来自 CreateFile 的句柄看起来是有效的,因此该端口不应被任何其他应用程序使用。有人遭受过这种情况吗?

4

4 回答 4

2

如果您在 Google 上搜索writefile hangs一词,您会发现很多关于此问题的讨论。一些线索是缓冲区溢出,正确调整缓冲区大小,有缺陷的 COM 端口,清除错误状态......似乎有很多事情可以尝试。

我建议的另一件事是使用通信库而不是直接调用 API,例如 Async Professional ( http://sourceforge.net/projects/tpapro/ )。即使它们为您的应用程序增加了一些开销,它们也可能会简化您的工作并避免许多潜在的陷阱......

于 2008-10-30T22:54:16.493 回答
0

您是否尝试过将 CommPortDriver.CheckLineStatus 设置为 true(“以防止在未连接设备或设备关闭时挂起”)?comdrv32.pas 库的源代码包含该建议。

于 2008-10-30T23:16:50.520 回答
0

您也可以尝试ComPort,它被忽略了一段时间,但现在又被积极开发了。

于 2008-11-03T08:57:47.720 回答
0

好吧,我正在使用这个库: Delphi 7 中的http://lhdelphi.ic.cz/uploader/storage/ComDrv32.pas,在 Windows XP 上,但里面的组件只是一些 Win API 调用的包装,CreateFile,写入文件等

于 2008-10-30T20:21:03.337 回答