Просмотр полной версии : Запаузить поток Delphi
imreadyourmind
23.04.2010, 19:34
Кто-как делаетт паузы в потоке?
Слиип и вейтфоробджект вешают программу(
Если использовать суспенд прямо в потоке, то возобновлять поток можно только вне потока.
К примеру если мне нужно запаузить поток на 20 секунд.
Я делал суперизвратно, вот таким способом.
Паузил поток суспендом и запускал вне потока таймер, по истечению которого поток опять запускался. Таким способом появляется максимум траблов и глюков.
Есть какие-нибудь адекватные способы запаузить поток на определенное кол-во времени, не вещая программу?
пускать sleep если установлен флаг?
GhostOnline
23.04.2010, 19:41
Самый безглючный вариант - создать глобальную переменную булева типа, а в потоке регулярно проверять её состояние:
while Pause do sleep(1);
imreadyourmind
23.04.2010, 19:44
пускать sleep если установлен флаг?
слип вешает программу!
Самый безглючный вариант - создать глобальную переменную булева типа, а в потоке регулярно проверять её состояние:
while Pause do sleep(1);
Это понятно, но слип вешает программу))
А мне нужно чтобы к примеру 1 из 100 потоков остановился а остальные 99 продолжали работать. А слип повесит всю 100 потоков.
а ты не пробовал слип в потоке запускать?
imreadyourmind
23.04.2010, 19:47
а ты не пробовал слип в потоке запускать?
Ты сам то пробовал?)))))))) Вешет слип всю программу.Вместе со всеми потоками, пробовал не раз.
GhostOnline
23.04.2010, 19:48
а ты не пробовал слип в потоке запускать?
+1. ТС в потоке слип не повесит программу, проверено
А чтобы можно было только один поток запаузить добавляй в класс потока свойство Pause, тогда у каждого потока свой флаг паузы
Ты сам то пробовал?)))))))) Вешет слип всю программу.Вместе со всеми потоками, пробовал не раз.
бред, ты что-то неправильно делаешь. Я гарантирую это!!11
Sleep - апишная функция, для текущего потока
imreadyourmind
23.04.2010, 19:49
Щас скину исходник и ехе)))))))
imreadyourmind
23.04.2010, 19:59
Все разобрался. если слип использовать в функции которая используется в синхронайз, то вешается все полностью. Если использовать слип в execute то вешается только один поток))))) Все верно)Сенкс)
M_script_
23.04.2010, 20:56
Синхронайзы - зло, слишком не увлекайся ими ;)
imreadyourmind
23.04.2010, 20:57
Синхронайзы - зло, слишком не увлекайся ими
Без синхронизации будет хуже))
GhostOnline
23.04.2010, 21:00
Синхронайзы - зло, слишком не увлекайся ими ;)
Ага, это точно.
Ставил эксперимент: 100 потоков двигают прогрессбар двумя разными способами: синхронайзом и оконными сообщениями. так в первом случае прогресс до 1000000 двигался 32 секунды, нагрузка на проц 50-60%(!), а во втором случае двигался 20 сек, а нагрузка стремилась к нулю!
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot