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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 06.10.2012, 16:07
arach arach вне форума
Прохожий
 
Регистрация: 17.06.2010
Сообщения: 39
Репутация: 10
Восклицание Выполнение цикла с задержкой

Есть у меня некая процедура, которую нужно выполнять в цикле, но с задержкой. Как эту задержку внести в цикл? Если сделать просто:
Код:
procedure Sending;
 var
 i: Integer;
 Begin
 for i:= 0 to database.Count - 1 do
 sent_msg;
 sleep(10000);
 End;
то форма повисает и задержка вообще не работает - моментально все выполняется. Делать в отдельном потоке - тоже не вариант. Как быть?
Ответить с цитированием
  #2  
Старый 06.10.2012, 16:12
arach arach вне форума
Прохожий
 
Регистрация: 17.06.2010
Сообщения: 39
Репутация: 10
По умолчанию

application.ProcessMessages; может исправить проблему?
Ответить с цитированием
  #3  
Старый 06.10.2012, 16:17
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от arach
Есть у меня некая процедура, которую нужно выполнять в цикле, но с задержкой. Как эту задержку внести в цикл? Если сделать просто:
Код:
procedure Sending;
 var
 i: Integer;
 Begin
 for i:= 0 to database.Count - 1 do
 sent_msg;
 sleep(10000);
 End;
то форма повисает и задержка вообще не работает - моментально все выполняется. Делать в отдельном потоке - тоже не вариант. Как быть?
Код:
procedure Sending;
var
  i: Integer;
begin
  for i := 0 to database.Count - 1 do
  begin
    sent_msg;
    Sleep(100);
    Application.ProcessMessages;
  end;
end;
Ответить с цитированием
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение:
arach (06.10.2012)
  #4  
Старый 06.10.2012, 16:24
arach arach вне форума
Прохожий
 
Регистрация: 17.06.2010
Сообщения: 39
Репутация: 10
По умолчанию

Задержка заработала, но форма очень сильно зависает sleep(10000);
Если выполнить в отдельном потоке висеть форма не будет?
Ответить с цитированием
  #5  
Старый 06.10.2012, 16:30
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от arach
Задержка заработала, но форма очень сильно зависает sleep(10000);
Чтобы не зависало вместо sleep(10000) пиши:
Код:
var
  j: Integer;
begin
  for j := 1 to 100 do
  begin
    Sleep(100);
    Application.ProcessMessages;
  end;
end;
Цитата:
Сообщение от arach
Если выполнить в отдельном потоке висеть форма не будет?
Чаще всего для этого отдельные потоки и делают.
Ответить с цитированием
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение:
arach (06.10.2012)
  #6  
Старый 06.10.2012, 16:36
arach arach вне форума
Прохожий
 
Регистрация: 17.06.2010
Сообщения: 39
Репутация: 10
По умолчанию

Если я напишу sleep(100), то меня забанит сервер
Ответить с цитированием
  #7  
Старый 06.10.2012, 16:55
arach arach вне форума
Прохожий
 
Регистрация: 17.06.2010
Сообщения: 39
Репутация: 10
По умолчанию

Создал отдельный поток - все отлично!
Ответить с цитированием
  #8  
Старый 06.10.2012, 16:57
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Цитата:
Сообщение от arach
Если я напишу sleep(100), то меня забанит сервер
Ну так что мешает сделать примерно так:
Код:
for i := 1 to database.count - 1 do
 sent_msg;

for j := 1 to 100 do
  begin
    Sleep(100);
    Application.ProcessMessages;
  end;

end;
Я так понимаю, poli-smen имел в виду именно это.

З.Ы. все же лучше использовать потоки.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter