Кто-как делаетт паузы в потоке? Слиип и вейтфоробджект вешают программу( Если использовать суспенд прямо в потоке, то возобновлять поток можно только вне потока. К примеру если мне нужно запаузить поток на 20 секунд. Я делал суперизвратно, вот таким способом. Паузил поток суспендом и запускал вне потока таймер, по истечению которого поток опять запускался. Таким способом появляется максимум траблов и глюков. Есть какие-нибудь адекватные способы запаузить поток на определенное кол-во времени, не вещая программу?
Самый безглючный вариант - создать глобальную переменную булева типа, а в потоке регулярно проверять её состояние: while Pause do sleep(1);
слип вешает программу! Это понятно, но слип вешает программу)) А мне нужно чтобы к примеру 1 из 100 потоков остановился а остальные 99 продолжали работать. А слип повесит всю 100 потоков.
+1. ТС в потоке слип не повесит программу, проверено А чтобы можно было только один поток запаузить добавляй в класс потока свойство Pause, тогда у каждого потока свой флаг паузы бред, ты что-то неправильно делаешь. Я гарантирую это!!11 Sleep - апишная функция, для текущего потока
Все разобрался. если слип использовать в функции которая используется в синхронайз, то вешается все полностью. Если использовать слип в execute то вешается только один поток))))) Все верно)Сенкс)
Ага, это точно. Ставил эксперимент: 100 потоков двигают прогрессбар двумя разными способами: синхронайзом и оконными сообщениями. так в первом случае прогресс до 1000000 двигался 32 секунды, нагрузка на проц 50-60%(!), а во втором случае двигался 20 сек, а нагрузка стремилась к нулю!