Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 10.09.2009, 12:16   #1
VadEr
Форумчанин
 
Аватар для VadEr
 
Регистрация: 24.03.2009
Сообщений: 375
По умолчанию Функция Sleep();

Добрый день!
Делаю задержку в цикле

for ...
...
Sleep(10);
...
и при этом программа полностью не отвечает пока цикл не пройдет. Как быть?
VadEr вне форума
Старый 10.09.2009, 12:35   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Поставь в цикл Application.ProcessMessages но Sleep не нужен тогда.
I'm learning to live...
Stilet вне форума
Старый 10.09.2009, 14:33   #3
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Еще можно реализовать через таймер с интервалом 10.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума
Старый 10.09.2009, 15:06   #4
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию

Может лучше написать поток?
pushl $0x18E3DF6B
call ICQ
russian-stalker вне форума
Старый 10.09.2009, 16:02   #5
Luke
Пользователь
 
Аватар для Luke
 
Регистрация: 12.10.2007
Сообщений: 32
По умолчанию

Ессно, Sleep приостанавливает текущий поток. Советую сделать поток. И синхронизировать его, нпаример с помощью мьютекса, проверяя в цикле. И делать Sleep(500) максимум.
Si vis pacem, para bellum!
Luke вне форума
Старый 10.09.2009, 16:18   #6
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

Что значит не отвечает? Программа выполняет только те действия, которые Вы заложили в алгоритме программы.
Если Вы задали в цикле просто вычисления, то программа выполняет эти вычисления не показывая сам процес и Вы, естественно, вынуждены ждать окончания процесса вычисления. Оператор Sleep() здесь ни при чем.
Как пример -
1- й вариант.
Код:
// рисуем прямоугольник, описание переменных я сознательно опускаю
 For i:= 1 to 200 do
 begin
 // любая процедура ощищения экрана (Clear) 
 Form1.Canvas.Rectangle(x,y,100,200);
 x:= x + dx; 
 Sleep(20);
 end;
2-й вариант.
Код:
Form1.Canvas.Recnangle(x,y,100,200);
 for i := 1 to 200 do
 begin
   x:= x + dx;
  Sleep(20);
 end;
  // Та же процедура Clear
  Form1.Canvas.Rectangle(x,y,100,200);
В первом случае мы увидим весь процесс перемещения прямоугольника поэтапно в процессе выполнения цикла.
Во втором - процесс перемещения будет скачкообразным, а сам у процедуру цикла мы вынуждены просто выждать.
Время выполнения всей операции перемещения прямоугольника в обоих случаях практически одинаково
Сам оператор Sleep() просто изменяет ( увеличивает) время выполнения цикла.Применение Sleep() оправдано в циклах с графикой (для плавности изображения) или в контролируемом цикле, когда каждый шаг цикла (иттерации) выводится на экран для возможности визуального наблюдения (контроля).
И не сомневайся даже ... отдых - кайф, работа - лажа!

Последний раз редактировалось DeKot; 10.09.2009 в 16:25.
DeKot вне форума
Старый 10.09.2009, 17:45   #7
VadEr
Форумчанин
 
Аватар для VadEr
 
Регистрация: 24.03.2009
Сообщений: 375
По умолчанию

Всем спасибо за ценные советы.
VadEr вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с Sleep! k1r1ch Общие вопросы Delphi 11 20.06.2009 19:12
Аналог Sleep() Ants Общие вопросы Delphi 2 18.11.2008 13:11
Функция для Sleep russian-stalker Общие вопросы Delphi 5 12.09.2008 16:40
Альтернатива sleep Zuzlan Общие вопросы Delphi 2 01.11.2007 01:44
одна функция потока, а другая функция - член класса запускающего этот поток Дмитрий_Ч Общие вопросы C/C++ 2 27.09.2007 08:50