Ћекции.ќрг


ѕоиск:




 атегории:

јстрономи€
Ѕиологи€
√еографи€
ƒругие €зыки
»нтернет
»нформатика
»стори€
 ультура
Ћитература
Ћогика
ћатематика
ћедицина
ћеханика
ќхрана труда
ѕедагогика
ѕолитика
ѕраво
ѕсихологи€
–елиги€
–иторика
—оциологи€
—порт
—троительство
“ехнологи€
“ранспорт
‘изика
‘илософи€
‘инансы
’ими€
Ёкологи€
Ёкономика
Ёлектроника

 

 

 

 


¬ременные характеристики процесса




¬оспользовавшись функцией GetProcessTimes, котора€ в Windows 9x отсутствует, можно получить различные временные характеристики процесса, а именно: истекшее врем€ (elapsed time), врем€, затраченное €дром (kernel time), и пользовательское врем€ (user time).

BOOL GetProcessTimes(HANDLE hProcess, LPFILETIME lpCreationTime, LPFILETIME lpExitTime, LPFILETIME lpKernelTime, LPFILETIME lpUserTime)

ƒескриптор процесса может ссылатьс€ как на процесс, который продолжает выполн€тьс€, так и на процесс, выполнение которого прекратилось. ¬ычита€ врем€ создани€ процесса (creation time) из времени завершени€ процесса (exit time), мы получаем истекшее врем€, как показано в следующем примере. “ип данных FILETIME €вл€етс€ 64-битовым; дл€ вычислени€ указанной разности объедините переменную этого типа с переменной тип LARGE_INTEGER в структуру типа union. –анее преобразование и отображение отметок времени файлов было продемонстрировано в главе 3 на примере программы lsw.

‘ункци€ GetThreadTimes аналогична только что описанной, но требует указани€ дескриптора потока в качестве параметра. ”правлению потоками посв€щена глава 7.

ѕример: временные характеристики процессов

Ќаш следующий пример (программа 6.2) представл€ет собой команду timep (от time print Ч вывод временных параметров), аналогичную UNIX-команде time (поскольку команда time поддерживаетс€ процессором командной строки, мы должны использовать дл€ нашей команды другое им€). ѕрограмма позвол€ет вывести все три временные характеристики, однако в Windows 9x будет доступно лишь истекшее врем€ процесса.

ќдним из возможных применений этой команды €вл€етс€ сравнительный анализ времени выполнени€ и эффективности различных версий функций копировани€ и преобразовани€ файлов из ASCII в Unicode, реализованных в предыдущих главах.

¬ данной программе используетс€ функци€ Windows GetCommandLine, котора€ возвращает целую командную строку, а не отдельные строки из массива argv.

 роме того, программа использует вспомогательную функцию SkipArg, котора€ просматривает командную строку и устанавливает в ней указатель в позицию, непосредственно следующую за именем исполн€емого файла. Ћистинг функции SkipArg приведен в приложении ј.

ƒл€ определени€ версии ќ— в программе 6.2 используетс€ функци€ GetVer-sionEx. ¬ операционных системах Windows 9x и Windows —≈ доступным будет лишь истекшее врем€ процесса. ѕрограммный код дл€ этих систем представлен с той целью, чтобы показать, что в некоторых случа€х работоспособность программ, по крайней мере Ч с частичным сохранением их функциональности, удаетс€ обеспечивать дл€ целого диапазона различных версий Windows.

ѕрограмма 6.2. timep: временные характеристики процессов

/* √лава 6. timep. */

#include "EvryThng.h"

 

int _tmain(int argc, LPTSTR argv[]) {

STARTUPINFO Startup;

PROCESS_INFORMATION ProcInfo;

union { /* Ёта структура используетс€ дл€ выполнени€ арифметических операций с участием временных параметров. */

LONGLONG li;

FILETIME ft;

} CreateTime, ExitTime, ElapsedTime;

FILETIME KernelTime, UserTime;

SYSTEMTIME ElTiSys, KeTiSys, UsTiSys, StartTimeSys, ExitTimeSys;

LPTSTR targv = SkipArg(GetCommandLine());

OSVERSIONINFO OSVer;

BOOL IsNT;

HANDLE hProc;

OSVer.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);

GetVersionEx(&OSVer);

IsNT = (OSVer.dwPlatformId == VER_PLATFORM_WIN32_NT);

/* NT (все версии) возвращает VER_PLATFORM_WIN32_NT. */

GetStartupInfo(&StartUp);

GetSystemTime(&StartTimeSys);

/* ¬ыполнить командную строку; дождатьс€ завершени€ процесса. */

CreateProcess (NULL, targv, NULL, NULL, TRUE, NORMAL_PRIORITY_CLASS, NULL, NULL, &StartUp, &ProcInfo);

/* ”бедитьс€ в наличии ¬—≈’ Ќ≈ќЅ’ќƒ»ћџ’ прав доступа к процессу. */

DuplicateHandle(GetCurrentProcess(), ProcInfo.hProcess, GetCurrentProcess(), &hProc, PROCESS_QUERY_INFORMATION | SYNCHRONIZE, FALSE, 0);

WaitForSingleObject(hProc, INFINITE);

GetSystemTime (&ExitTimeSys);

if (IsNT) { /* Windows NT. ƒл€ процесса вычисл€етс€ истекшее врем€, врем€ выполнени€ в режиме €дра и врем€ выполнени€ в пользовательском режиме. */

GetProcessTimes(hProc, &CreateTime.ft, &ExitTime.ft, &KernelTime, &UserTime);

ElapsedTime.li = ExitTime.li Ц CreateTime.li;

FileTimeToSystemTime(&ElapsedTime.ft, &ElTiSys);

FileTimeToSystemTime(&KernelTime, &KeTiSys);

FileTimeToSystemTime(&UserTime, &UsTiSys);

_tprintf(_T("»стекшее врем€: %02d:%02d:%02d:%03d\n"), ElTiSys.wHour, ElTiSys.wMinute, ElTiSys.wSecond, ElTiSys.wMilliseconds);

_tprintf(_T("ѕользовательское врем€: %02d:%02d:%02d:%03d\n"), UsTiSys.wHour, UsTiSys.wMinute, UsTiSys.wSecond, UsTiSys.wMilliseconds);

_tprintf(_T("—истемное врем€: %02d:%02d:%02d:%03d\n"), KeTiSys.wHour, KeTiSys.wMinute, KeTiSys.wSecond, KeTiSys.wMilliseconds);

} else {

/* Windows 9x и —≈. ¬ычисл€етс€ лишь истекшее врем€. */

Е

}

CloseHandle(ProcInfo.hThread);

CloseHandle(ProcInfo.hProcess);

CloseHandle(hProc);

return 0;

}





ѕоделитьс€ с друзь€ми:


ƒата добавлени€: 2015-09-20; ћы поможем в написании ваших работ!; просмотров: 560 | Ќарушение авторских прав


ѕоиск на сайте:

Ћучшие изречени€:

—тудент может не знать в двух случа€х: не знал, или забыл. © Ќеизвестно
==> читать все изречени€...

2409 - | 2015 -


© 2015-2024 lektsii.org -  онтакты - ѕоследнее добавление

√ен: 0.014 с.