Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Два потока
Форум программистов > Системное программирование > Delphi и Pascal > Delphi - Базы данных
Crucian
Здравствуйте товарищи програмисты.
У меня такой вопрос: Есть приложение Delphi, работающее с базой Oracle. В приложении запускаются два потока. Оба потока обращаются к базе. Один работает постоянно, другой спит, и "просыпается" раз в минуту.
Так вот в момент его активации приложение виснет. Подскажите кто знает, от чего это происходит и как с этим бороться?
Morpheus
у Вас ошибка в 404 строчке
????
да там кода всего на 20 строк smile.gif
Morpheus
НУ так а я про что ... ошибка 404 - строка не найдена laugh.gif
SNike
Слишком мало информации чтобы что-то посоветовать...
Как правило, частенко бывают проблемы когда несколько потоков пытаются использовать один ресурс
Crucian
Для Morpheus:
Я так и знал smile.gif

Концептуально модель выглядит так:
----Первый поток--------------------
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;


Если у кого есть мысли или литература по этой теме, пожалуста пишите. Я с использованием потоков столкнулся недавно, поэтому еще много не знаю.
Silver Wind
Попробуй завести 2 одинаковых ADOConnection, и работай в первом потоке через ADOConnection1, а во втором через ADOConnection2.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2008 IPS, Inc.