Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Запаузить поток Delphi (https://forum.antichat.xyz/showthread.php?t=198653)

imreadyourmind 23.04.2010 19:34

Запаузить поток Delphi
 
Кто-как делаетт паузы в потоке?
Слиип и вейтфоробджект вешают программу(
Если использовать суспенд прямо в потоке, то возобновлять поток можно только вне потока.

К примеру если мне нужно запаузить поток на 20 секунд.
Я делал суперизвратно, вот таким способом.

Паузил поток суспендом и запускал вне потока таймер, по истечению которого поток опять запускался. Таким способом появляется максимум траблов и глюков.

Есть какие-нибудь адекватные способы запаузить поток на определенное кол-во времени, не вещая программу?

gisTy 23.04.2010 19:40

пускать 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 потоков.

gisTy 23.04.2010 19:45

а ты не пробовал слип в потоке запускать?

imreadyourmind 23.04.2010 19:47

Цитата:

а ты не пробовал слип в потоке запускать?
Ты сам то пробовал?)))))))) Вешет слип всю программу.Вместе со всеми потоками, пробовал не раз.

GhostOnline 23.04.2010 19:48

Цитата:

Сообщение от gisTy
а ты не пробовал слип в потоке запускать?

+1. ТС в потоке слип не повесит программу, проверено
А чтобы можно было только один поток запаузить добавляй в класс потока свойство Pause, тогда у каждого потока свой флаг паузы

Цитата:

Ты сам то пробовал?)))))))) Вешет слип всю программу.Вместе со всеми потоками, пробовал не раз.
бред, ты что-то неправильно делаешь. Я гарантирую это!!11

Sleep - апишная функция, для текущего потока

imreadyourmind 23.04.2010 19:49

Щас скину исходник и ехе)))))))

imreadyourmind 23.04.2010 19:59

Все разобрался. если слип использовать в функции которая используется в синхронайз, то вешается все полностью. Если использовать слип в execute то вешается только один поток))))) Все верно)Сенкс)

M_script_ 23.04.2010 20:56

Синхронайзы - зло, слишком не увлекайся ими ;)


Время: 05:45