首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >德尔菲TComPort WriteAsync

德尔菲TComPort WriteAsync
EN

Stack Overflow用户
提问于 2017-09-12 07:45:51
回答 1查看 629关注 0票数 2

我试图异步地通过TComPort组件发送一个字符串,但是所有东西都是同步发送的。问题是,应用程序将被封锁,直到传输结束。

我的代码:

代码语言:javascript
复制
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;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-12 08:41:21

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

如果您需要确保在完成写作时,将WaitForAsync 设置为之前的下一个写入操作(或在需要写入完成的另一个操作之前)。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46170740

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档