2

我正在尝试通过 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;
4

1 回答 1

1

写作是异步的。但是你WaitForAsync在写完之后立即调用会扼杀所有异步操作的感觉。

如果需要确保写入完成,请在下一次写入操作之前(或在另一个需要写入完成的操作之前)WaitForAsync

一般来说 - 值得在附加线程中等待重叠操作完成或使用完成回调例程进行通知

于 2017-09-12T08:41:21.767 回答