超奇怪错误! 我的程序一旦切换输入法马上就死掉了。请问各位大侠有没有碰到这种情况!(100分)

  • 主题发起人 主题发起人 yinju
  • 开始时间 开始时间
Y

yinju

Unregistered / Unconfirmed
GUEST, unregistred user!
我写的是个多线程程序 另外一个线程是用来访问数据库的,线程里创建了一个ADOCONNECTION链接数据库,还有个QUEREY,和主线程只有一个地方交互,就是一个数组把查询到的数据传给主程序
代码如下:
Function ThreadFunc(P: Pointer): LongInt;
stdcall;
var
IniFile: TIniFile;
IsGet: Boolean;
MsgStrList: TStrings;
MsgString: String;
ADOConnection1: TADOConnection;
GetData, UpData: TADOQuery;
begin
Coinitialize(nil);
ADOConnection1:= TADOConnection.Create(Nil);
ADOConnection1.LoginPrompt:= False;
ADOConnection1.Mode:= cmShareDenyNone;
ADOConnection1.ConnectionTimeout:= 30;

IsGet:=true;
/////////////测试连接连接数据库////////////////////
ADOConnection1.Connected:= false;
Try
ADOConnection1.Connected:=true;
Except
IsGet:=False;
end;

/////////////////////////每隔5秒从数据库中读取一次数据////////////////////////
While Truedo
begin
//////////////程序结束,跳出该线程/////////////////
If ThreadFree then
begin
CoUninitialize;
DeleteCriticalSection(CS);
MsgStrList.Free;
ADOConnection1.Connected:= False;
ADOConnection1.Free;
GetData.Free;
Exit;
end;
////////////////取得最新数据/////////////////////////
if IsGet then
begin
GetData:= TADOQuery.Create(Nil);
GetData.Connection:= ADOConnection1;
Try
GetData.Close;
GetData.Open;
IsGet:= True;
Except
IsGet:= False;
end;
end;
///////////////将数据库中的数据取出,放入msgStrList//////////////////////////
。。。
if IsGet then
begin
if MsgStrList.Count<>0 then
begin
EnterCriticalSection(CS);
ThreadCach.SetString(MsgStrList);///////向环形数组中写数据//////
LeaveCriticalSection(CS);
end;
/////////////////////////////////////////////////////
end;
///////////如果连接出错,不停的测试数据库连接,直到连接成功////////////////
while not IsGetdo
begin
try
ADOConnection1.Connected:=False;
ADOConnection1.Connected:=true;
IsGet:= true;
except
IsGet:=False;
end;
Sleep(2000);
end;
Sleep(5000);
end;

end;

 
你确认跟这个线程有关系吗?我觉得应该是输入法的事吧。
 
确认,我在多台机器上做过测试了,其他机器什么输入法都没装,就是系统自带的
 
不能随便在访问其他线程的vcl控件应该用Synchronize同步!
 
我的VCL组件都是在线程中创建的,没有掉用主线程的
 
问题解决,是由于线程中的循环是一个死循环,占用了大量的资源,导致其他操作没有足够的资源,所以感觉就像死机一样!
 
后退
顶部