多线程串口通讯的奇怪问题(200分)

  • 主题发起人 主题发起人 catbrother
  • 开始时间 开始时间
看看:
http://www.ccw.com.cn/htm/app/aprog/01_1_8_4.asp
 
我怀疑你的代码停在ReadFile上了, 建议你用ClearCommError, 获取对列中的数据长度
然后读入相应的数据
大致如此
procedure TReadThread.Execute;
var
EventMask : DWord;
Overlapped: TOverlapped;
Error : Cardinal;
Stat : TComStat;
begin
FillChar(Overlapped, SizeOf(Overlapped), 0);

while not Terminated do
try
//检测是否有关闭串口信号
if WaitForSingleObject(FOwner.FCloseEvent, 0)=WAIT_OBJECT_0 then Break;

//等待串口事件
EventMask := 0;
Win32Check(WaitCommEvent(FOwner.FHandle, EventMask, @Overlapped));

//读取串口状态信息
ClearCommError(FOwner.FHandle, Error, @Stat);

//串口数据到达
PostMessage(FOwner.FHWND, WM_DEVICENOTIFY, Stat.cbInQue, 0);
except
on E: Exception do
begin
TLogFile.WriteLn('"%s"等待串口事件通知失败, 错误信息="%s"', [FOwner.Name, E.Message]);
end;
end;
end;
 
我是用MSComm控件的,感觉不错!
 
应该不是超时吧,如果用了同步还死机,那就怪了,你的线程读取是如何做的?
 
看看
http://www.softreg.com.cn/shareware_view.asp?id=/41E56581-0D51-4F22-8B0F-8AE92E0AD75E/
 
后退
顶部