Я в 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++
Программы на C++. Форум разработчиков
-
Anonymous
1743495708
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, и имел одинаковую проблему. Я озадачен, потому что из того, что я прочитал о документации, это должно работать нормально.
Подробнее здесь: [url]https://stackoverflow.com/questions/79548069/getprocesstimes-returning-equal-values-even-after-delay[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия