GETPROCESSTITERS возвращает равные значения даже после задержкиC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 GETPROCESSTITERS возвращает равные значения даже после задержки

Сообщение Anonymous »

Я в Windows 10, программируя в последней сборке QT. Я пытаюсь сделать системный монитор, подобный менеджеру задач для моего университетского проекта, и для получения отдельного использования процессора процесса, я использую два раза разобраться с задержкой между ними 500 мс и сравнение результатов с протекаемыми временем. Проблема заключается в том, что оба экземпляра GetProcessTimes выводят одинаковые даже с задержкой между ними на 500 м, за исключением случаев, когда использование процессора процесса является особенно высоким.map ProcessMap;
map processUsageCPU;
map processUsageMEM;

void* getProcessUsage(){
SYSTEM_INFO sysInfo;

GetSystemInfo(&sysInfo);
int numProcessors = sysInfo.dwNumberOfProcessors;

while(1){
map usrTimesLast;
map systemTimesLast;
map checkTimes;
list procBuffer;

for(auto process : ProcessMap){
procBuffer.push_back(process.first);
//take its user time and system time and put it in the respective map
FILETIME uTime, sTime, fTime, cTime, tTime;
GetSystemTimeAsFileTime(&tTime);
HANDLE hProcess = OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION, FALSE, process.first);

GetProcessTimes(hProcess,&cTime, &fTime, &sTime, &uTime);
usrTimesLast[process.first] = uTime;
systemTimesLast[process.first] = sTime;
checkTimes[process.first] = tTime;
CloseHandle(hProcess);
}

Sleep(REFRESH*0.5);

for(unsigned int process : procBuffer){

FILETIME NuTime, NsTime, NfTime, NcTime, NtTime;
FILETIME uTime = usrTimesLast[process];
FILETIME sTime = systemTimesLast[process];
FILETIME tTime = checkTimes[process];

HANDLE hProcess = OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION, FALSE, process);
GetProcessTimes(hProcess, &NcTime,&NfTime,&NsTime,&NuTime);
GetSystemTimeAsFileTime(&NtTime);

ULARGE_INTEGER kerL,kerR,usrL,usrR,timeL, timeR;

memcpy(&timeL, &tTime, sizeof(FILETIME));
memcpy(&timeR, &NtTime, sizeof(FILETIME));
long long totTime = timeR.QuadPart - timeL.QuadPart;

memcpy(&kerL, &sTime, sizeof(FILETIME));
memcpy(&kerR, &NsTime, sizeof(FILETIME));
long long kernTime = kerR.QuadPart - kerL.QuadPart;

memcpy(&usrL, &uTime, sizeof(FILETIME));
memcpy(&usrR, &NuTime, sizeof(FILETIME));
long long userTime = usrR.QuadPart - usrL.QuadPart;

long long systemTime = kernTime + userTime;

processUsageCPU[process] = (totTime - systemTime) * 100 / numProcessors;
qDebug()
Изменение времени задержки не повлияло, я попробовал другой вариант этой программы, найденной в Интернете, используя время getProcessTimes, и имел одинаковую проблему. Я озадачен, потому что из того, что я прочитал о документации, это должно работать нормально.

Подробнее здесь: https://stackoverflow.com/questions/795 ... fter-delay
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»