Помогите сделать паузу
От: Mainframer  
Дата: 31.08.01 00:56
Оценка:
Есть программа в которой надо регулярно производить действия через равные промежутки времени. Попытка написать самому функцию задержки на основе класса CTime не привела к добру. Скопированная с сайта Майкрософта подсказка из MSDN типа

void sleep( clock_t wait )
{
clock_t goal;
goal = wait + clock();
while( goal > clock() );
}

ничего хорошего не дает, так как грузит процессор на все сто во время "простоя" и еще к тому же компилятор все паузы собирает в одну, от чего получается вообще ерунда. Помогите сделать паузу.
Re: Помогите сделать паузу
От: Mainframer  
Дата: 31.08.01 01:21
Оценка:
Приношу свои извинения, после прикапывания в своих книжках отыскал функцию Sleep() API
Re: Помогите сделать паузу
От: Mainframer  
Дата: 31.08.01 01:24
Оценка:
Ой! Это тоже НЕ РАБОТАЕТ!!! Опять все собирается в одну большую паузу. Неужели придется SetTimer и писать обработчик? Все же помогите.
Re[2]: Помогите сделать паузу
От: IT Россия linq2db.com
Дата: 31.08.01 01:34
Оценка:
M>Ой! Это тоже НЕ РАБОТАЕТ!!! Опять все собирается в одну большую паузу. Неужели придется SetTimer и писать обработчик? Все же помогите.

Sleep не грузит процессор, операционка использует это время для выполнения других задач. Просто твой sleep должен выглядеть примерно так.

void sleep( int msec )
{
Sleep(msec);
}

Но если не устраивает, то тогда только таймер
Если нам не помогут, то мы тоже никого не пощадим.
Re: Помогите сделать паузу
От: Ace  
Дата: 31.08.01 08:58
Оценка:
А чем не устраивает таймер. Задаешь нужные параметры, потом обрабатываешь WM_TIMER.
Re[2]: Помогите сделать паузу
От: Sasparella США  
Дата: 31.08.01 10:57
Оценка:
Здравствуйте Ace, вы писали:

Ace>А чем не устраивает таймер. Задаешь нужные параметры, потом обрабатываешь WM_TIMER.


Еще можно CreateWaitableTimer

Саша
Re[3]: Помогите сделать паузу
От: Eugene  
Дата: 31.08.01 15:10
Оценка:
Здравствуйте IT, вы писали:

IT>Sleep не грузит процессор, операционка использует это время для выполнения других задач. Просто твой sleep должен выглядеть примерно так.


IT>void sleep( int msec )

IT>{
IT> Sleep(msec);
IT>}

А смысл? :)
Don't trouble trouble until trouble troubles you
Re: Помогите сделать паузу
От: ZORK Россия www.zorkaltsev.com
Дата: 31.08.01 15:20
Оценка:
Здравствуйте Mainframer, вы писали:

M>Есть программа в которой надо регулярно производить действия через равные промежутки времени. Попытка написать самому функцию задержки на основе класса CTime не привела к добру. Скопированная с сайта Майкрософта подсказка из MSDN типа


M>void sleep( clock_t wait )

M>{
M> clock_t goal;
M> goal = wait + clock();
M> while( goal > clock() );
M>}

M>ничего хорошего не дает, так как грузит процессор на все сто во время "простоя" и еще к тому же компилятор все паузы собирает в одну, от чего получается вообще ерунда. Помогите сделать паузу.


Нужно больше инфо.:

— Какая структура никти
— Обрабатываются ли в ней Windows сообщения
— Используешь ли ты WaitFor....Object(s)
— Для какой ОС?
— Какая нужна точность интервалов?

Так же было бы полезно показать скелет кода, в котором тебе нужна эта задержка
Думать надо ...головой :)
Re[4]: Помогите сделать паузу
От: IT Россия linq2db.com
Дата: 31.08.01 15:30
Оценка:
IT>>Sleep не грузит процессор, операционка использует это время для выполнения других задач. Просто твой sleep должен выглядеть примерно так.

E>А смысл? :)


А при чём тут смысл? Раз надо значит надо ;)
Если нам не помогут, то мы тоже никого не пощадим.
Re[5]: Помогите сделать паузу
От: Eugene  
Дата: 31.08.01 15:37
Оценка:
Здравствуйте IT, вы писали:

IT>void sleep( int msec )

IT>{
IT> Sleep(msec);
IT>}

И все-таки, чем это лучше, чем просто вызов Sleep()?
Просто он видимо вызывает Sleep в потоке user-interface, потому у него приложение и виснет.
Don't trouble trouble until trouble troubles you
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.