Два потока

  • Автор темы Crucian
  • Дата начала
C

Crucian

#1
Здравствуйте товарищи програмисты.
У меня такой вопрос: Есть приложение Delphi, работающее с базой Oracle. В приложении запускаются два потока. Оба потока обращаются к базе. Один работает постоянно, другой спит, и "просыпается" раз в минуту.
Так вот в момент его активации приложение виснет. Подскажите кто знает, от чего это происходит и как с этим бороться?
 

morpheus

скриптописец
07.08.2006
3 915
1
#4
НУ так а я про что ... ошибка 404 - строка не найдена ;)
 
S

SNike

#5
Слишком мало информации чтобы что-то посоветовать...
Как правило, частенко бывают проблемы когда несколько потоков пытаются использовать один ресурс
 
C

Crucian

#6
Для Morpheus:
Я так и знал ;)

Концептуально модель выглядит так:
Код:
----Первый поток--------------------
procedure Thread1.Execute;
begin

try

try

ADOConnection1.Connected:=True;

ADOConnection1.BeginTrans;


//Вызовы хранимых процедур....


except

end;


finally

ADOConnection1.CommitTrans;

ADOConnection1.Connected:=False;

Terminate;

end;

end;

----Второй поток--------------------
procedure Tread2.Execute;
begin

while not Terminated do begin
Synchronize(DoWork);
sleep(60000);
end;

end;

procedure Tread2.DoWork;
begin
try
try

DataModule1.Сommand.CommandText:='select 1 from dual';
DataModule1.Сommand.Execute;

except
end;
finally
end;

end;

----Вызов потоков--------------------
//Второй поток запускается в момент активации глаувной формы приложения 

procedure TMainForm.FormActivate(Sender: TObject);
begin
fTread:=KeepAliveTread.Create(false);
fTread.FreeOnTerminate:=true;
end;

//Первый поток запускается пользователем
procedure TMainForm.Button1Click(Sender: TObject);
var sTread:Thread1;
begin

try
sTread:=Thread1.Create(true);
sTread.Priority:=tpNormal;
sTread.FreeOnTerminate:=true;
sTread.Resume;
except

end;
end;
Если у кого есть мысли или литература по этой теме, пожалуста пишите. Я с использованием потоков столкнулся недавно, поэтому еще много не знаю.
 
S

Silver Wind

#7
Попробуй завести 2 одинаковых ADOConnection, и работай в первом потоке через ADOConnection1, а во втором через ADOConnection2.