Hol*_*rwa 2 delphi delphi-2009 omnithreadlibrary
我的应用程序将有多个任务用于各种操作.
所有任务都在FormCreate中创建并在FormDestroy中终止,只要应用程序正在运行,它们就会一直运行.
主线程的唯一目的是处理用户I/O并将用户输入发送到适当的任务或接收要在主窗体中显示的任务信息.
必须在任务之间传输数据.
示例:
我将执行任务A进行数据处理.
它会将一些结果发送到主线程进行显示.
它还必须将一些(其他)数据发送到任务B,任务B将数据传输到另一台PC.
任务C将从硬件设备接收一些数据,并且必须将此数据发送到任务A进行处理.
等等...
据我所知,到目前为止,使用OmniThreadLibrary发送消息总是在任务和创建任务的线程之间(主线程和任务A,或主线程和任务B).
如何在任意两个任务之间直接发送消息?
或者到目前为止我的方法有什么问题,它应该完全不同吗?
可能.您必须在所有者中创建通信通道并将其传递给两个任务.在任务中,然后调用Task.RegisterComm来注册此通信通道.从那时起,在此频道上收到的所有消息都将使用标准的OmniThreadLibrary机制进行调度(就像它们将从所有者发送一样).
有关示例,请参见演示08_RegisterComm.
procedure TfrmTestRegisterComm.FormCreate(Sender: TObject);
begin
FCommChannel := CreateTwoWayChannel(1024);
FClient1 := CreateTask(TCommTester.Create(FCommChannel.Endpoint1))
.Run;
FClient2 := CreateTask(TCommTester.Create(FCommChannel.Endpoint2))
.Run;
end;
function TCommTester.Initialize: boolean;
begin
Task.RegisterComm(ctComm);
Result := true;
end;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
588 次 |
| 最近记录: |