gpt4 book ai didi

multithreading - 为什么使用OmniThreadLibrary Parallel.Pipeline的应用程序在关闭后仍继续在后台运行?

转载 作者:行者123 更新时间:2023-12-03 19:40:14 25 4
gpt4 key购买 nike

我正在使用OmniThreadLibrary实现用于发送电子邮件的后台pipleline(请参阅此SO question)。我注意到关闭应用程序后,它会继续在后台运行(在Windows Task Manager中可见)。这意味着我实现OTL管道的方式在我的代码中出了点问题。你能帮我找出麻烦吗?

代码如下:

unit uEmailQueue;

interface

uses Classes, OtlCommon, OtlCollections, OtlParallel, Windows;

type
TEmailServer = record
SMTPHost: String;
SMTPPort: Integer;
SMTPUseSSL: Boolean;
SMTPUserName: String;
SMTPPassword: String;
SMTPSenderName: String;
end;

TEmailMessage = record
RecipientEmailAddr: String;
EmailSubject: String;
EmailMessage: String;
end;

TEmailQueue = class(TObject)
private
FEmailServer: TEmailServer;
FPipeline: IOmniPipeline;
procedure SendEmailStage(const input, output: IOmniBlockingCollection);
public
constructor Create;
destructor Destroy; override;
procedure SendEmail(AEmailMessage: TEmailMessage);
end;

implementation

{ TEmailQueue }

procedure TEmailQueue.SendEmailStage(const input, output: IOmniBlockingCollection);
var
mailmessage: TOmniValue;
begin
for mailmessage in input do
begin
Beep(3700, 1500); // just some dummy code for now
end;
end;

constructor TEmailQueue.Create;
begin
FPipeline := Parallel.pipeline.Stage(SendEmailStage).Run;

end;

destructor TEmailQueue.Destroy;
begin

inherited;
end;

procedure TEmailQueue.SendEmail(AEmailMessage: TEmailMessage);
begin
FPipeline.input.Add(TOmniValue.FromRecord(AEmailMessage));

// FPipeline.input.CompleteAdding;

// FPipeline.WaitFor(INFINITE);

end;

end.

我初始化并像上面这样调用上面的类:

在应用程序主窗体的OnCreate事件中:
  FEmailQueue := TEmailQueue.Create;

主窗体上的按钮在OnClick事件中具有以下功能:
var
em: TEmailMessage;
begin
FEmailQueue.SendEmail(em);

稍后,我在主窗体的OnDestroy事件中释放了这样的类:
  FEmailQueue.Free;

最佳答案

您应该从FPipeline.input.CompleteAdding调用TEmailQueue.Destroy。否则,SendEmailStage将永远不会停止。

关于multithreading - 为什么使用OmniThreadLibrary Parallel.Pipeline的应用程序在关闭后仍继续在后台运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30808504/

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