• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Два потока

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

Crucian

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

morpheus

НУ так а я про что ... ошибка 404 - строка не найдена ;)
 
S

SNike

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

Crucian

Для 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

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

Обучение наступательной кибербезопасности в игровой форме. Начать игру!