gpt4 book ai didi

delphi - 是否可以在任务之间发送消息(OmniThreadLibrary)?

转载 作者:行者123 更新时间:2023-12-03 18:15:19 26 4
gpt4 key购买 nike

我的应用程序将有多个用于执行各种操作的任务。
所有任务都在 FormCreate 中创建并在 FormDestroy 中终止,只要应用程序运行,它们就始终运行。
主线程的唯一目的是处理用户 I/O 并将用户输入发送到适当的任务或接收要在主窗体中显示的任务信息。

任务之间必须传输数据。
示例:
我将让任务 A 进行数据处理。
它将把一些结果发送到主线程进行显示。
它还必须向任务 B 发送一些(其他)数据,任务 B 会将数据传输到另一台 PC。
任务 C 将从硬件设备接收一些数据,并且必须将这些数据发送给任务 A 进行处理。
等等...

据我所知,到目前为止,使用 OmniThreadLibrary 发送消息始终是在任务和创建该任务的线程(主线程和任务 A,或主线程和任务 B)之间进行。

如何在任意两个任务之间直接发送消息?

或者到目前为止我的方法有什么问题,应该完全不同吗?

最佳答案

有可能。您必须在所有者中创建一个通信 channel 并将其传递给这两个任务。然后在任务中调用 Task.RegisterComm 来注册此通信 channel 。从那时起,在此 channel 上收到的所有消息都将使用标准 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;

关于delphi - 是否可以在任务之间发送消息(OmniThreadLibrary)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4681254/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com