gpt4 book ai didi

multithreading - Delphi XE线程: how to realize function calling buffer?

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

我试图实现一个函数调用缓冲区。我的问题是功能取决于用户的答案。因此,函数可以执行很长时间(由于等待用户回答),因此必须按以下顺序调用我的函数:

  function 1 started
waiting for user, (here function 2 is waiting for function 1)
function 1 ended

function 2 started
waiting for user
function 2 ended

...

因此,直到功能1结束,才能调用功能2。

我需要的是这样的:
function MyFunc: string;
begin
Caption.Text := 'Answer required';
while not ButtonSend_WasPress do
Application.ProcessMessages;
Result := Memo2.Text;
ButtonSend_WasPress := False;
end;

procedure OnAnswerRequired(Request: string);
begin
Memo1.Text := Request;
Memo2.Text := MagicalAddFunctionToCallBufferAndGetFunctionResult(MyFunc);
end;

也许是这样的:
procedure OnAnswerRequired(Request: string);
var MyThread:TThread;
begin
Memo1.Text := Request;

MyThread := TThread.CreateAnonymousThread(
procedure begin
Memo2.Text := MyFun;
end
);
MagicalAddThreadToBuffer(MyThread);
end;

更新:

问题还在于OnAnswerRequired是某个复杂对象的事件,每个调用实例都位于其自己的线程中。所以我不能只在一个线程内执行函数。

我正在开发测试程序。人工测试人员使用此测试程序可以模拟Web服务。该Web服务具有一个函数( function Transmit(text: string): string;),它是Delphi Web服务函数,并且在其自己的线程中工作。当模拟Web服务的人收到文本请求时,他想了很多然后回答。但是人工测试人员希望请求按照创建的顺序出现,并且下一个请求必须在上一个请求被回答后才显示。

Web服务没有自己的线程。而是每次请求到达时,Delphi都会在新线程中执行Transmit函数。在函数退出之前,必须有一个答案(Delphi将在soap中发送结果作为Web服务函数的结果)。并且函数退出后无法返回结果值。所以我将永远有许多函数的实例。问题是如何为功能实例实现FIFO队列。

最佳答案

由于直到函数1结束才可以调用函数2,所以没有必要使用线程(事情不是并行完成的)。在我看来,您似乎不必要地使事情复杂化了……只需依次调用函数并在其中显示模式对话框即可获得用户输入。

关于multithreading - Delphi XE线程: how to realize function calling buffer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7305216/

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