Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.04.2014, 14:45   #1
a1t2m3
Новичок
Джуниор
 
Регистрация: 10.04.2014
Сообщений: 7
По умолчанию переписать программу с С++ на Делфи

#include <iostream>
#include <Windows.h>
#include <Psapi.h>

__int64 FILETIMEToInt64(FILETIME filetime){
__int64 curTime;
curTime = filetime.dwHighDateTime;
curTime <<= 32;
curTime += filetime.dwLowDateTime;
return curTime;
}

__int64 GetTotalTimeWorkedProcess(){
DWORD processes[1024];//В этом массиве будем хранить список идентификаторов процессов. Делаем его как можно больше, т.к. не знаем сколько реально у нас идентификаторов туда может записаться.
DWORD cbNeeded;//Количество байт возвращается в aProcesses. В эту переменную, значение запишет сама функция EnumProcesses.
DWORD countProcesses;//Количество процессов
__int64 sumlpKernelTime = 0; // время, работы процесса в режиме ядра
__int64 sumlpUserTime = 0; // время, работы процесса в режиме пользователя
if (!EnumProcesses(processes, sizeof(processes), &cbNeeded)){
std::cout << "Exception in EnumProcesses";
//во время выполнения функции произошла ошибка.
}
else{
countProcesses = cbNeeded / sizeof(DWORD);
//с помощью функции GetProcessTimes замеряем, время, которое процесс провел в пользовательском режиме и режиме ядра, складываем эти показатели
for (int i = 0; i < countProcesses; i++)
if (processes[i] != 0){
HANDLE currentProcess = OpenProcess(PROCESS_QUERY_INFORMATI ON |
PROCESS_VM_READ,
FALSE, processes[i]);
if (NULL != currentProcess)
{
FILETIME lpCreationTime, lpExitTime, lpKernelTime, lpUserTime;
if (GetProcessTimes(currentProcess, &lpCreationTime, &lpExitTime, &lpKernelTime, &lpUserTime)){
sumlpKernelTime += FILETIMEToInt64(lpKernelTime);
sumlpUserTime += FILETIMEToInt64(lpUserTime);
}
}
}
}
return sumlpKernelTime + sumlpUserTime;
}

void main(){
SYSTEM_INFO sysinfo;
GetSystemInfo(&sysinfo);
int countKernels = sysinfo.dwNumberOfProcessors; //Количество ядер процессора
//std::cout << "Count process: " << countProcesses << std::endl;
//Вычисляем среднее значение загрузки процессора в течени 1 секунды.
DWORD timeInterval = 1000;
__int64 totalTimeWorkedProcess = GetTotalTimeWorkedProcess();
FILETIME lpSystemTimeAsFileTime;
GetSystemTimeAsFileTime(&lpSystemTi meAsFileTime);//Функция GetSystemTimeAsFileTime извлекает дату и время текущей операционной системы
__int64 timeStart = FILETIMEToInt64(lpSystemTimeAsFileT ime);
Sleep(timeInterval);
//Считаем разницу между запросами
totalTimeWorkedProcess = GetTotalTimeWorkedProcess() - totalTimeWorkedProcess;
GetSystemTimeAsFileTime(&lpSystemTi meAsFileTime);
__int64 timeEnd = FILETIMEToInt64(lpSystemTimeAsFileT ime);
totalTimeWorkedProcess /= countKernels;//общее время проработанное процессами делим на количество ядер.
std::cout << "Percent load process: " << 100 * ((double) totalTimeWorkedProcess / (double) (timeEnd - timeStart));

char Exit_f;
std::cin >> Exit_f;
}


программа должна определеять основные параметры загруженности компьютера
a1t2m3 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Переписать программу с C++ на Delphi karapus Фриланс 10 13.08.2013 00:02
Переписать программу с Delphi на C# newresident Фриланс 4 06.05.2013 10:48
переписать программу геннадий522 Visual C++ 2 18.12.2011 14:46
переписать программу d0nDi Общие вопросы Delphi 1 06.08.2011 22:55
Код игры на Паскале и на Делфи сильно отличается? Как переписать код с Паскаля в Делфи? Mclaren Помощь студентам 2 27.04.2009 22:37