Ast*_*tor 2 delphi multithreading buffer soap delphi-xe
我试图实现一个函数调用缓冲区.我的问题是功能与用户的答案有关.所以函数可以执行很长时间(由于等待用户回答),我的函数必须按以下顺序调用:
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
...
Run Code Online (Sandbox Code Playgroud)
因此在函数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;
Run Code Online (Sandbox Code Playgroud)
或者类似这样的事情:
procedure OnAnswerRequired(Request: string);
var MyThread:TThread;
begin
Memo1.Text := Request;
MyThread := TThread.CreateAnonymousThread(
procedure begin
Memo2.Text := MyFun;
end
);
MagicalAddThreadToBuffer(MyThread);
end;
Run Code Online (Sandbox Code Playgroud)
更新:
问题还在于OnAnswerRequired是一个复杂对象的事件,每个调用实例都位于自己的线程中.所以我不能只在一个线程内执行函数.
我正在开发测试程序.使用此测试程序,人工测试程序模拟Web服务.Web服务有一个函数(function Transmit(text: string): string;),它是一个Delphi Web服务函数,并在自己的线程中工作.当人类模仿网络服务得到文本请求时,他正在思考很多然后回答.但是人类测试人员希望请求按照创建的顺序出现,并且必须在之前的应答之后才显示下一个请求.
Web服务没有自己的线程.相反,每当请求到达时,Delphi都会在新线程中执行Transmit函数.在函数退出之前,必须有一个答案(Delphi会在soap中发送结果作为web服务函数的结果).并且退出后函数不能返回结果值.所以我总会有很多函数的实例.问题是如何实现函数实例的FIFO队列.
由于在函数1结束之前无法调用函数2,因此没有必要使用线程(事情不是并行完成的).对我来说,看起来你不必要地使事情变得复杂......只需按顺序调用函数并在其中显示模态对话框以获得用户输入.
| 归档时间: |
|
| 查看次数: |
952 次 |
| 最近记录: |