![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Подключение к БД в потоке [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]Еще один образец бессмысленного вторичного потока.