![]() |
Запаузить поток Delphi
Кто-как делаетт паузы в потоке?
Слиип и вейтфоробджект вешают программу( Если использовать суспенд прямо в потоке, то возобновлять поток можно только вне потока. К примеру если мне нужно запаузить поток на 20 секунд. Я делал суперизвратно, вот таким способом. Паузил поток суспендом и запускал вне потока таймер, по истечению которого поток опять запускался. Таким способом появляется максимум траблов и глюков. Есть какие-нибудь адекватные способы запаузить поток на определенное кол-во времени, не вещая программу? |
пускать sleep если установлен флаг?
|
Самый безглючный вариант - создать глобальную переменную булева типа, а в потоке регулярно проверять её состояние:
while Pause do sleep(1); |
Цитата:
Цитата:
А мне нужно чтобы к примеру 1 из 100 потоков остановился а остальные 99 продолжали работать. А слип повесит всю 100 потоков. |
а ты не пробовал слип в потоке запускать?
|
Цитата:
|
Цитата:
А чтобы можно было только один поток запаузить добавляй в класс потока свойство Pause, тогда у каждого потока свой флаг паузы Цитата:
Sleep - апишная функция, для текущего потока |
Щас скину исходник и ехе)))))))
|
Все разобрался. если слип использовать в функции которая используется в синхронайз, то вешается все полностью. Если использовать слип в execute то вешается только один поток))))) Все верно)Сенкс)
|
Синхронайзы - зло, слишком не увлекайся ими ;)
|
| Время: 05:45 |