Delphi TComPort WriteAsync
Delphi TComPort WriteAsync
我正在尝试通过 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;
写入是异步的。但是您在写入后立即调用 WaitForAsync
会消除所有异步操作的感觉。
如果需要确定是否完成写入,请在WaitForAsync
下一次写入操作之前(或其他需要写入完成的动作之前)
一般来说,值得在附加线程中等待重叠操作完成或使用完成回调例程进行通知
我正在尝试通过 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;
写入是异步的。但是您在写入后立即调用 WaitForAsync
会消除所有异步操作的感觉。
如果需要确定是否完成写入,请在WaitForAsync
下一次写入操作之前(或其他需要写入完成的动作之前)
一般来说,值得在附加线程中等待重叠操作完成或使用完成回调例程进行通知