Delphi TComPort WriteAsync

时间:2017-09-12 07:45:51

标签: delphi tcomport

我试图通过TComPort组件异步发送一个字符串, 但一切都是同步发送的。 问题是应用程序将被阻止并等待传输结束。

我的代码:

procedure TForm1.Button1Click(Sender: TObject);
var
  sss: string;
  i: Integer;
  t: cardinal;
begin
sss:='';
for i := 0 to 100 do
  begin
    sss:= sss + '1';
  end;

 memo1.Lines.Add('Str len - ' + IntToStr(Length(sss)));

if self.MyPort1.Connected then
  begin
    InitAsync(Operation1);
  try
    self.MyPort1.WriteStrAsync(sss,Operation1);
     t:= GetTickCount;
    self.MyPort1.WaitForAsync(Operation1);
     t:= GetTickCount - t;
  finally
    DoneAsync(Operation1);
  end;

  memo1.Lines.Add('Т - ' + IntToStr(t));
end;
end;

1 个答案:

答案 0 :(得分:1)

写作是异步的。但是,在写入之后立即调用WaitForAsync会消除所有异步操作的感觉。

如果您需要确保完成写作,请在下一次写入操作之前(或在需要写入完成的其他操作之前)进行WaitForAsync

一般情况下 - 等待在其他线程中完成重叠操作或使用完成回调例程进行通知是值得的