Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 19.06.2018, 15:11
maxfox123 maxfox123 вне форума
Прохожий
 
Регистрация: 07.07.2013
Сообщения: 17
Версия Delphi: delphi 6
Репутация: 10
По умолчанию Процесс подключения к постгресу

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

Код:
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) Либо заставить не зависать программу

Спасибо
Ответить с цитированием
  #2  
Старый 19.06.2018, 15:31
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Перед Sleep() попробуйте вставить Application.ProcessMessages;
Ответить с цитированием
  #3  
Старый 19.06.2018, 15:39
maxfox123 maxfox123 вне форума
Прохожий
 
Регистрация: 07.07.2013
Сообщения: 17
Версия Delphi: delphi 6
Репутация: 10
По умолчанию

Цитата:
Сообщение от Alegun
Перед Sleep() попробуйте вставить Application.ProcessMessages;
Это тоже не работает
Ответить с цитированием
  #4  
Старый 19.06.2018, 15:46
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

А что,так поток нужен?,обычный таймер чем провинился
Ответить с цитированием
  #5  
Старый 19.06.2018, 15:51
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Цитата:
Сообщение от Alegun
Перед Sleep() попробуйте вставить Application.ProcessMessages;

Бред...

По вопросу: Если ты подключаешься к БД и обновляешь прогресс из одного потока - то у тебя естественно поток тормозится на время работы Connect и прогресс обновляться не будет. Можно пойти дальше: сделать отдельный поток для отображения прогресса (вообще полный бред )

Самое простое сделать так:
1. Отобразил главную форму.
2. Отобразил окошечко (TForm) с надписью "Подождите коннектимся к БД" и переделал курсор на "часики".
3. Запустил коннект.
4. Переделал курсор обратно на "стрелочку"
5. По результатам скрыл окно с надписью или выдал в него сообщение об ошибке.
6 profit
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #6  
Старый 19.06.2018, 16:16
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от Aristarh Dark
...Можно пойти дальше: сделать отдельный поток для отображения прогресса...
Так вроде это уже и происходит,поток чисто для отправки мессагой положения прогрессбара,видимо на время подключения обработка сообщений тоже замораживается, - в таймере и с "пропуском вперёд" от приложения в принципе, должно работать
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 21:41.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter