Два потока

Тема в разделе "Delphi - Базы данных", создана пользователем Crucian, 26 дек 2007.

  1. Crucian

    Crucian Гость

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

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    у Вас ошибка в 404 строчке
     
  3. ????

    ???? Гость

    да там кода всего на 20 строк ;)
     
  4. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    НУ так а я про что ... ошибка 404 - строка не найдена ;)
     
  5. SNike

    SNike Гость

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

    Crucian Гость

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

    Концептуально модель выглядит так:
    Код (Text):
    ----Первый поток--------------------
    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;
    Если у кого есть мысли или литература по этой теме, пожалуста пишите. Я с использованием потоков столкнулся недавно, поэтому еще много не знаю.
     
  7. Silver Wind

    Silver Wind Гость

    Попробуй завести 2 одинаковых ADOConnection, и работай в первом потоке через ADOConnection1, а во втором через ADOConnection2.
     
Загрузка...
Похожие Темы - Два потока
  1. XiNoID
    Ответов:
    6
    Просмотров:
    815
  2. Shm0N
    Ответов:
    1
    Просмотров:
    1.001
  3. alturgrey
    Ответов:
    3
    Просмотров:
    1.148
  4. lizkaliz
    Ответов:
    0
    Просмотров:
    1.133
  5. andruxai
    Ответов:
    2
    Просмотров:
    1.374

Поделиться этой страницей