delphi
程序将共用TDataModule上一个ADOConnection;
ADOConnection连接数据库时(特别是配置出错或者SQL Server无响应时)程序几乎停滞,怎样让ADOConnection连接时不影响程序做其他事情,用多线程怎样保证线程安全。
程序将共用TDataModule上一个ADOConnection;
ADOConnection连接数据库时(特别是配置出错或者SQL Server无响应时)程序几乎停滞,怎样让ADOConnection连接时不影响程序做其他事情,用多线程怎样保证线程安全。
程序公用的Adoconnection都连不上,你的程序还需要做什么其他事?
可以用多线程,比如连接的过程写到线程中,连接状态返回到主窗体或者等待窗体,没什么线程安全不安全的问题,你连不上数据库,顶多其他功能不能用。
希望有更多的答案,最好有个多线程的解决办法。谢谢
比如ADODateSet
1.Application.ProcessMessages;
adoconMain.Close;
adoconMain.connectionstring:=...;
Application.ProcessMessages; <---------- 这里或者其他地方,能做到只有连接时无响应
adoconMain.Connected:=True;
2.多线程中测试能正常连接数据库,再让adoconMain连接。
procedure TThreadConSer.Execute;
begin
inherited;
...
CoInitialize(NULL);
try
adoconTest.Connected:=True;
dmMain.ConnectMode:=cmOK; <-----
except
dmMain.ConnectMode:=cmNo; <----- 通过ConnectMode知道现在是否能够连接。感觉这是目前为止想到最好的办法
end;
CoUnInitialize;
...
end;
3.直接通过线程连接。
procedure TThreadConSer.Execute;
begin
inherited;
...
CoInitialize(NULL);
try
adoconMain.Connected:=True;
except
...
end;
CoUnInitialize;
...
end; <-------------这样就没第2个那么麻烦,但是会不会有线程不安全不稳定之类的后顾之忧啊。------------------------------------------------------------------
帮看下这3个方法能行不或者存在的问题,更期待有更加完美的答案,谢谢大家参与探讨!
如果有多个这个线程启动的可能,那就把连接过程放到Synchornize里