所以我的应用程序是一个出租车呼叫调度系统,其中操作员通过电话接听电话并将接听的电话分配给司机。在输入呼叫详细信息的“呼叫详细信息”表单上,单击“保存”按钮后,该表单应关闭,应在后台线程中向出租车司机发送电子邮件,并显示主表单,他可以在其中选择下一个呼叫并将其分配给另一个驱动程序。
设计的难点在于它应该是一个队列,这意味着队列中的电子邮件需要等到对正在发送的电子邮件的处理完成。当然,电子邮件发送发生在与 VCL 主线程不同的线程中。
对主线程的唯一响应将是队列中剩余的电子邮件数量,通过从主线程到电子邮件程序线程的函数调用。例如。如果用户试图关闭应用程序,它将询问电子邮件队列类是否有任何电子邮件待处理。
在 Delphi 中,什么样的类设计和构造最能实现这个功能?我确定它有一个或多个 TThreads,但除此之外我迷路了。我本可以开始写一些东西,但我确信它是错误的,我需要把它拆开,在这里发布并根据建议重新开始。这就是为什么我首先在这里发布 - 我想要设计技巧。由于我使用的是 Delphi,所以我在这里发布是因为我想要特定于 Delphi 的设计技巧。提前感谢您的任何答案。
注意:我愿意使用 TThread 实现或 OmniThreadLibrary。
我为该课程提供了一个基本模板,答案需要扩展和构建。
unit uEmailQueue;
interface
uses Classes;
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;
public
procedure SendEmail(AEmailMessage: TEmailMessage);
end;
implementation
{ TEmailQueue }
procedure TEmailQueue.SendEmail(AEmailMessage: TEmailMessage);
begin
end;
end.