gpt4 book ai didi

delphi - 取消 ADO 连接的连接尝试吗?

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

我在线程中有一个TADOConnection。如果无法连接到数据库(超时),则在关闭应用程序时,线程将被暂停,并且需要一段时间才能完成尝试,然后我的应用程序才能关闭。我不想减少连接的连接超时,这不是问题。有什么方法可以强制中止连接尝试吗?

TADOConnection 在线程执行开始时进行连接,并自动重复重新连接,直到成功。然后,在关闭应用程序时,如果数据库连接失败,线程将挂起,直到连接尝试完成(超时)。

编辑

这是线程如何工作的示例:

procedure TMyThread.Init;
begin
CoInitialize(nil);
FDB:= TADOConnection.Create(nil);
FDB.LoginPrompt:= False;
FDB.ConnectionTimeout:= 5;
FDB.ConnectOptions:= coAsyncConnect;
end;

procedure TMyThread.Uninit;
begin
if FDB.Connected then
FDB.Connected:= False;
FDB.Free;
CoUninitialize;
end;

function TMyThread.Reconnect: Boolean;
begin
Result:= False;
if FDB.Connected then
FDB.Connected:= False;
FDB.ConnectionString:= FConnectionString;
try
FDB.Connected:= True; //How to abort?
Result:= True;
except
on e: exception do begin
//MessageDlg(e.Message, mtError, [mbOK], 0);
FDB.Connected:= False;
Result:= False;
end;
end;
end;

procedure TMyThread.Process;
begin
if Reconnect then begin //Once connected, keep alive in loop
while FActive do begin
if Terminated then Break;
if not Connected then Break;

//Do Some Database Work

end;
end else begin
//Log connection failure
end;
end;

procedure TMyThread.Execute;
begin
while not Terminated do begin
if FActive then begin
Init; //CoInitialize, create DB, etc.
try
while (FActive) and (not Terminated) do begin
try
Process; //Actual processing procedure
except
on e: exception do begin
//Record error to log
end;
end;
end;
finally
Uninit; //CoUninitialize, destroy DB, etc.
end;
end;
end;
end;

(尝试仅包含与问题相关的内容)

最佳答案

首先想到的是减少连接超时。你为什么不想要那个?以及为什么要在关闭应用程序时建立连接?特别是当您希望在比预期花费更多时间时中止它时,为什么还要连接呢?听起来我们可以了解更多背景信息。

在特殊情况下,您确实需要它,条件是连接速度快,并且当这个问题适用于应用程序的销毁时,那么我建议不要等待线程完成。只是不要释放它,终止应用程序,并让 Windows 终止该进程,包括其所有线程。

如果连接确实成功,那么这种方法可能会适得其反,因此当线程连接时向主线程发出信号,并通过等待线程来推迟其终止。您可能需要再次超时。

编辑:

我想每次尝试连接时都会发生 OnWillConnect 事件。尝试在其处理程序中返回 EventStatus := esCancel

关于delphi - 取消 ADO 连接的连接尝试吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14415443/

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