我有一个简单的应用程序,它应该每分钟向串行端口发送一个字节。但有时,从某些奇怪的原因,它在WriteFile()函数中的某处冻结。 sw和hw流量控制均关闭。我已经搜索了一些关于从另一个线程执行的挂起读取操作的东西,但我相信这不是问题,因为我的应用程序有单线程。此外,CreateFile的句柄看起来有效,因此任何其他应用程序都不应使用该端口。有人遭受过这种情况吗?
答案 0 :(得分:2)
如果你谷歌搜索 writefile挂起这个词,你会发现很多关于这个问题的讨论。一些线索是缓冲区溢出,正确调整缓冲区大小,有缺陷的COM端口,清除错误状态......似乎有很多事情要尝试。
我建议的另一件事是使用通信库而不是直接调用API,比如Async Professional(http://sourceforge.net/projects/tpapro/)。即使它们为您的应用程序增加了一些开销,它们也可能简化您的工作并避免一些潜在的陷阱......
答案 1 :(得分:0)
好吧,我正在使用这个库:在Windows XP上的Delphi 7中使用http://lhdelphi.ic.cz/uploader/storage/ComDrv32.pas,但里面的组件只是一些Win API调用,CreateFile,WriteFile等的包装。
答案 2 :(得分:0)
您是否尝试将CommPortDriver.CheckLineStatus设置为true(“以防止未连接设备或设备关闭时挂起”)? comdrv32.pas库的源代码包含该建议。
答案 3 :(得分:0)
你也可以试试ComPort,这段时间被忽略但现在又被积极开发了。