Ограничение времени работы потока
я делаю так:
DWORD t1 = GetTickCount(); //Стартовое время
//Непрерывная работа потока реального времени
......
DWORD t2 = (GetTickCount() - t1); //Затраченное время
//Ограничиваем загрузку процессора 70-ю процентами
Sleep( t2 * (100 - 70) / 100 );
Может кто знает лучшие варианты?
почему определяет?? оно просто освобождает процессорное время от данного потока на n милисикунд
Но я не просил критиковать мой метод, он хоть и приблизительно но всеже рабочий, лучше скажи как правильно?
Метод довольно относителен, то есть если поток будет действительно "реального времени" то вычисления будут верными, если же внутри потока будут обращения к каким либо ресурсам то вычисления будут неверны. Различные системные таймауты будут отдавать процессор другим задачам, в то время как мой поток будет бездействовать. Кроме того загрузка процессора будет "рваной", то 100% то 0%...
Правильнее было бы использовать вызов
NtQuerySystemInformation и в структуре SYSTEM_PROCESS_INFORMATION смотреть CreateTime, UserTime, KernelTime. Но сам вызов NtQuerySystemInformation занимает приличное время, мне же нужна точнось до 1% загрузки процессора.
Потому я и спрашиваю может есть какие либо стандартные (или не очень) средства для ограничения времени работы потока? Но без его удаления, а только приостановка/замедление.
ЗЫЖ Пока это писал пришло на ум попробовать использовать SuspendThread и ResumeThread