|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
02.05.2011, 12:21 | #1 |
Пользователь
Регистрация: 26.01.2011
Сообщений: 48
|
Альтернатива Sleep;
Необходимо следующее: в процедуре программа должна простаивать (просто в этой процедуре дальше по коду не проходить) рандомное кол-во времени. Делаю это с помощью sleep, но в этом случае вся программа перестает отвечать на запросы (в том числе и нужные процедуры). Есть ли какая-то хорошая альтернатива sleep? Заранее благодарен
|
02.05.2011, 13:15 | #2 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Делай это в потоках.
I'm learning to live...
|
02.05.2011, 13:49 | #3 |
Пользователь
Регистрация: 26.01.2011
Сообщений: 48
|
Но при этом выполнение одной процедуры (конкретно, Timer) должно быть остановлено, а другая (в частности, FormKeyPress) продолжать работать. Ведь если сделать в двух разных потоках, то Timer все равно выполнить до конца сразу. Или можно ждать завершения потока в определенном месте кода?
|
02.05.2011, 13:57 | #4 |
Пользователь
Регистрация: 26.01.2011
Сообщений: 48
|
Может, проще описать проблему таким образом: нужно на некоторое время остановить выполнение процедуры, но так, чтобы все остальные процедуры работали
|
02.05.2011, 14:37 | #5 |
Форумчанин
Регистрация: 08.09.2010
Сообщений: 880
|
Если вызов Sleep разбить на "атомы", допустим по 100 мсек (в зависимости от задачи), то в промежутках между вызовами Sleep можно выполнять все остальное.
Примерно так: Код:
Уточнить бы. Последний раз редактировалось Прик; 02.05.2011 в 14:55. |
02.05.2011, 14:54 | #6 |
Пользователь
Регистрация: 26.01.2011
Сообщений: 48
|
да, конкретно пауза нужна в таймере. Делал нечто подобное, предварительно выключая, а после задержки включая таймер, но нет, именно во время задержки форма перестает перехватывать нажатия клавиш (что мне как раз и нужно), как только задержка проходит, все становится нормально
|
02.05.2011, 15:01 | #7 |
Форумчанин
Регистрация: 08.09.2010
Сообщений: 880
|
Application.ProcessMessages;
позволяет передавать управление системе. В приведенном примере как раз этот способ и позволяет управлять программой в то время как процедура "на тормозе". Эксперимент показал, что и в процедуре обработки таймера прием работает. Код:
Последний раз редактировалось Прик; 02.05.2011 в 15:17. |
02.05.2011, 15:13 | #8 |
Пользователь
Регистрация: 26.01.2011
Сообщений: 48
|
Application.ProcessMessages; Про это я знаю) Но если время задержки больше времени таймера?
|
02.05.2011, 15:24 | #9 |
Форумчанин
Регистрация: 08.09.2010
Сообщений: 880
|
Ну, если мы отключаем таймер (Timer1.Enabled := false), то какое это имеет значение.
После отработки задержки таймер вновь включается и вызывает свою процедуру через заданный ему интервал. |
02.05.2011, 15:38 | #10 |
Пользователь
Регистрация: 26.01.2011
Сообщений: 48
|
Странно) Мой эксперимент показывает, что этот вариант тоже не работает) Форма не подает никаких признаков жизни по время прокрутки while (что весьма удивительно). В необходимый FormKeyPress программа в этот момент не заходит.
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
функция Sleep() | ^Angel^ | Общие вопросы C/C++ | 9 | 07.05.2011 13:27 |
Альтернатива sleep для треда | bulldog5293 | Общие вопросы Delphi | 28 | 08.12.2010 21:58 |
Функция Sleep(); | VadEr | Общие вопросы Delphi | 6 | 10.09.2009 17:45 |
Аналог Sleep() | Ants | Общие вопросы Delphi | 2 | 18.11.2008 13:11 |
Альтернатива sleep | Zuzlan | Общие вопросы Delphi | 2 | 01.11.2007 01:44 |