Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Подключение к БД в потоке [D5, MSSQL]


AlexG ©   (2004-10-13 10:44:00) 

Мне нужно поместить проверку подключения в поток. Я делаю так:

procedure TSearchServer.Execute;
begin
 Synchronize(OnExecute); //<--здесь вызывается CheckConnection
 Suspend;
 Terminate;
end;

procedure TfrmLogin.CheckConnection;
begin
 DoConnectToServer;
end;

procedure TfrmLogin.btnCheckConnectionClick(Sender: TObject);
begin
  if <условие> then
  begin
     FCheckConnection := TSearchServer.Create(TRUE);
     FCheckConnection.Priority := tpLowest;
     FCheckConnection.FreeOnTerminate := TRUE;
     FCheckConnection.OnExecute := CheckConnection;
     FCheckConnection.Suspended := FALSE;
  end
  else begin
     FCheckConnection.Suspended := TRUE;
     FCheckConnection.Terminate;
  end;
end;

Но при этом у меня с программой не получается работать. А я хочу, чтобы во время проверки соединения можно было работать с программой. Как мне правильно организовать работу потока?


AlexG   (2004-10-13 15:05:00) [1]

В общем, я хочу сделать следующее: http://delphimaster.ru/cgi-bin/forum.pl?id=1097655754&n=1


KSergey   (2004-10-13 14:33:00) [2]

> [10] AlexG ©   (13.10.04 13:59)
> //KSergey
> Э-э-э.... Что ты сказал? :)

Я не понял что сказано в [8] ;)


AlexG   (2004-10-13 13:59:00) [3]

//KSergey
Э-э-э.... Что ты сказал? :)


KSergey   (2004-10-13 13:28:00) [4]

> [8] AlexG ©   (13.10.04 13:13)
> Я уже через асинхронный механизм работы с БД пошел. Думаю,
> так равильнее всего.

Я не понял что правильее: пройти или не нам и остановить свой выбор? ;)


AlexG   (2004-10-13 13:13:00) [5]

Я уже через асинхронный механизм работы с БД пошел. Думаю, так равильнее всего.


KSergey   (2004-10-13 13:03:00) [6]

> [6] AlexG ©   (13.10.04 11:45)
> Так?

и не только.
Обеспечить безконфликтный доступ к общим данным, например.
А еще можно книжку почитать ;)

А еще можно объяснить что хочется получить - может кто подскажет совершенно другой, более правильный и простой путь решения.


AlexG   (2004-10-13 11:45:00) [7]

Значит все дело в Syncronize. Если я хочу, чтобы эти километры коды выполнялись параллельно, мне не нужно испоьзовать Syncronize. Так? Но при этом у меня не должно быть конфликтов, поэтому все работаюobt элементы нужно вынести в сам поток... Так?


Reindeer Moss Eater   (2004-10-13 11:22:00) [8]

Можно вынести километры кода в доп. поток.
А потом тупо "обернуть" весь Execute в Syncronize. После чего весь километр кода будет выполнятся в первичном потоке.


AlexG   (2004-10-13 10:58:00) [9]

Значит, DoConnectToServer нужно перенести в поток. Т.е. полностью перенести все поля, к которым происходит обращение и т.д. и т.п. Так? Тогда будет нормально работать и будет он не бессмысленным? Я правильно понял тебя?


Reindeer Moss Eater   (2004-10-13 10:53:00) [10]

Он бессмысленный потому, что весь код его выполняется в главном потоке.


AlexG   (2004-10-13 10:52:00) [11]

Почему бессмысленного? Как сделал бы ты?


Reindeer Moss Eater   (2004-10-13 10:47:00) [12]

Еще один образец бессмысленного вторичного потока.


Наверх

Титульная страница Поиск, карта сайта Написать письмо