Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PostgreSQL > Процесс подключения к постгресу


Автор: maxfox111 19.6.2018, 15:24
Попытку подключения к постгресу осуществляю, в основной форме программы, следующим образом, как показано ниже. 

Код

FMBZ_MyThread := TFMBZ_ProgressBarThread.Create(False);
FMBZ_MyThread.Priority:= tpNormal;
sleep(50);

try
iFMBZ_ZConnection.Connect;
except
ShowMessage('Please clarify: is the server running on host ' + iFMBZ_ZConnection.HostName + '?');
end;


где iFMBZ_ZConnection это переменная TZConnection;

Но в процессе подключения программа "немножко" зависает и для того что бы показать что идет подключение и нужно подождать, ввел прогресбар который запускаю в потоке создаваемом до подключения к постгресу.

Код

FMBZ_MyThread := TFMBZ_ProgressBarThread.Create(False);
FMBZ_MyThread.Priority:= tpNormal;


процедуры изменения прогресбара ниже
Код

procedure TFMBZ_ProgressBarThread.Execute;
while not(FMBZ_MyThread.Terminated) do
begin
sleep(50);
PostMessage(FMBZ_MainAdminForm.Handle,PROGRESS_POS,0,1);
end;
end;
procedure TFMBZ_MainAdminForm.SetProgressPos(var Msg: TMessage);
begin
FMBZ_ProgressBar.Position:=FMBZ_ProgressBar.Position + Msg.LParam;
if (FMBZ_ProgressBar.Position >= FMBZ_ProgressBar.Max) then
FMBZ_ProgressBar.Position := 0;
FMBZ_ProgressBar.Refresh;
end;


НО, шкала прогресбара начинает изменяться только после обработки подключения. (Поток делал и через синхронайз если что, результат одинаковый)

Может ли кто нибудь подсказать как 
1) Либо заставить прогресбар изменяться в процессе подключения к постгресу
2) Либо заставить не зависать программу

Спасибо


Автор: Snowy 19.6.2018, 16:19
Подвисает не прогрессбар, а основной поток приложения, в котором ты и коннектишься к базе.
Пока он висит, никакие контролы на форме обновляться не смогут, что бы там не происходило в других потоках - основной поток просто не отзывается на призывы обновления формы.
Чтобы он не зависал, придётся connection вынести в отдельный тред. 
Но тогда потеряешь возможность пользоваться DB контролами и придётся работать с базой вручную...
Так что вывод простой - если у connection нет асинхронного варианта, то никак.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)