Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Ограничение времени работы потока

2.7K
06 февраля 2007 года
barracuda
76 / / 29.03.2004
Кто нить знает как правильно ограничить время работы потока?
я делаю так:

DWORD t1 = GetTickCount(); //Стартовое время

//Непрерывная работа потока реального времени
......

DWORD t2 = (GetTickCount() - t1); //Затраченное время

//Ограничиваем загрузку процессора 70-ю процентами
Sleep( t2 * (100 - 70) / 100 );

Может кто знает лучшие варианты?
11K
06 февраля 2007 года
.nornad
125 / / 04.01.2007
С каких это пор Sleep стал определять загрузку проца? :eek:
2.7K
06 февраля 2007 года
barracuda
76 / / 29.03.2004
Цитата: .nornad
С каких это пор Sleep стал определять загрузку проца? :eek:



почему определяет?? оно просто освобождает процессорное время от данного потока на n милисикунд
Но я не просил критиковать мой метод, он хоть и приблизительно но всеже рабочий, лучше скажи как правильно?

499
06 февраля 2007 года
madjahed
149 / / 14.01.2004
А чем твой метод тебе не нравится? Сделано всё вроде правиильно. В чём короче проблема?
2.7K
07 февраля 2007 года
barracuda
76 / / 29.03.2004
Цитата: madjahed
А чем твой метод тебе не нравится? Сделано всё вроде правиильно. В чём короче проблема?



Метод довольно относителен, то есть если поток будет действительно "реального времени" то вычисления будут верными, если же внутри потока будут обращения к каким либо ресурсам то вычисления будут неверны. Различные системные таймауты будут отдавать процессор другим задачам, в то время как мой поток будет бездействовать. Кроме того загрузка процессора будет "рваной", то 100% то 0%...
Правильнее было бы использовать вызов
NtQuerySystemInformation и в структуре SYSTEM_PROCESS_INFORMATION смотреть CreateTime, UserTime, KernelTime. Но сам вызов NtQuerySystemInformation занимает приличное время, мне же нужна точнось до 1% загрузки процессора.
Потому я и спрашиваю может есть какие либо стандартные (или не очень) средства для ограничения времени работы потока? Но без его удаления, а только приостановка/замедление.

ЗЫЖ Пока это писал пришло на ум попробовать использовать SuspendThread и ResumeThread

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог