Я в 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
GETPROCESSTITERS возвращает равные значения даже после задержки ⇐ C++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Scipy-correlate: как изменить задержки точек данных на временные задержки?
Anonymous » » в форуме Python - 0 Ответы
- 157 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Использование или (|) не возвращает результаты, равные отдельным регуляторам
Anonymous » » в форуме Python - 0 Ответы
- 8 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Использование или (|) не возвращает результаты, равные отдельным регуляторам
Anonymous » » в форуме Python - 0 Ответы
- 9 Просмотры
-
Последнее сообщение Anonymous
-