Реферат: Эффективная многопоточность
status = ZwQuerySystemInformation(NT::SystemTimeOfDayInformation,
&timeinfo, sizeof timeinfo, 0);
if(status!=NO_ERROR)
return -1;
// Получаемвремяпростоя
NT::SYSTEM_PERFORMANCE_INFORMATION perfinfo = {0};
status = ZwQuerySystemInformation(NT::SystemPerformanceInformation,
&perfinfo, sizeof perfinfo, 0);
if(status != NO_ERROR)
return -1;
// если это первый вызов, значение вычислить нельзя
if(liOldIdleTime.QuadPart != 0)
{
// Времяпростоя
dbIdleTime = Li2Double(perfinfo.IdleTime) - Li2Double(liOldIdleTime);
// Системноевремя
const double dbSystemTime = Li2Double(timeinfo.CurrentTime)
- Li2Double(liOldSystemTime);
dbIdleTime = dbIdleTime / dbSystemTime;
dbIdleTime = 100.0 - dbIdleTime * 100.0
/ (double)sysinfo.NumberProcessors + 0.5;
}
// сохраняемполученныезначения
liOldIdleTime = perfinfo.IdleTime;
liOldSystemTime = timeinfo.CurrentTime;
// Если это первый вызов, получаем загруженность CPU за последние
// 200 милисекунд
if(dbIdleTime == 0)
{