CnPack Forum » CnVCL 组件包 » CnModem错误报告


2009-3-28 10:08 zj_yqj
CnModem错误报告

procedure TCnModem.Escape;
var
  Tick: Integer;
begin
  if CommOpened and (ModemState = msOnline) then
  begin
    Tick := Round(FWaitEscapeTime * 0.02 * 1.3);
    Sleep(Tick);
    WriteATCommand('+++', False);
    Sleep(Tick);
    ModemState := msOnlineCommand;
  end;
end;

这里的0.02应该为20.因为下面的Sleep中的单位是毫秒。

2009-3-28 12:10 zj_yqj
function TCnModem.WaitATResult(Delay: Cardinal): string;
var
  Tick: Cardinal;
begin
  FWaitATResult := True;
  try
    FATResult := '';
    Tick := GetTickCount;
    while (GetTickCount - Tick < Delay) and (FATResult = '') do
      Application.ProcessMessages;
    Result := FATResult;
    FATResult := '';
  finally
    FWaitATResult := False;
  end;
end;

Application.ProcessMessages;
后面要加一行
Sleep(1);
否则等待时CPU打满了了

2009-3-28 19:42 zjy
感谢报告!

0.02 的问题估计是当初疏忽,刚才看到 SkyJacker 写的 Demo 里也提到了这个疑问,已改为 20。
ProcessMessages 修改为 HandleMessage,后者会调用 Idle,比 Sleep 更规范。

已提交 CVS,有空请验证。

页: [1]
查看完整版本: CnModem错误报告


Powered by Discuz! Archiver 5.0.0  © 2001-2006 Comsenz Inc.