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

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

Наш следующий пример (программа 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 "), ElTiSys.wHour, ElTiSys.wMinute, ElTiSys.wSecond, ElTiSys.wMilliseconds);

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

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

 } else {

  /* Windows 9x и СЕ. Вычисляется лишь истекшее время. */

  …

 }

 CloseHandle(ProcInfo.hThread);

 CloseHandle(ProcInfo.hProcess);

 CloseHandle(hProc);

 return 0;

}

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

ГЛАВА 8. ДИСПЕТЧЕРИЗАЦИЯ ПРОЦЕССОВ И ЕЕ ВРЕМЕННЫЕ ХАРАКТЕРИСТИКИ

Из книги Архитектура операционной системы UNIX автора Бах Морис Дж

ГЛАВА 8. ДИСПЕТЧЕРИЗАЦИЯ ПРОЦЕССОВ И ЕЕ ВРЕМЕННЫЕ ХАРАКТЕРИСТИКИ В системе разделения времени ядро предоставляет процессу ресурсы центрального процессора (ЦП) на интервал времени, называемый квантом, по истечении которого выгружает этот процесс и запускает другой,


R.12.2 Временные объекты

Из книги Справочное руководство по C++ автора Страустрап Бьярн

R.12.2 Временные объекты В некоторых ситуациях транслятору бывает необходимо или удобно создавать временные объекты. Использование временных объектов зависит от реализации. Если транслятору понадобился временный объект типа класса с конструктором, он должен обеспечить


Временные файлы проектов

Из книги Pinnacle Studio 11 автора Чиртик Александр Анатольевич

Временные файлы проектов В ходе работы над проектом Studio создает дополнительные файлы, в которые сохраняет промежуточные данные, такие как результат просчета видеоэффектов, переходов и т. д. Впоследствии данные в этих файлах используются для предварительного просмотра и


7.2.6.1. Временные файлы

Из книги Искусство программирования для Unix автора Реймонд Эрик Стивен

7.2.6.1. Временные файлы Использование временных файлов в качестве буферов обмена данными является старейшей из существующих IPC-методик. Несмотря на недостатки, она остается удобной в сценариях командных интерпретаторов и одноразовых программах, где более сложный и


7.2.6.1. Временные файлы

Из книги Искусство программирования для Unix автора Реймонд Эрик Стивен

7.2.6.1. Временные файлы Использование временных файлов в качестве буферов обмена данными является старейшей из существующих IPC-методик. Несмотря на недостатки, она остается удобной в сценариях командных интерпретаторов и одноразовых программах, где более сложный и


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

Из книги Системное программирование в среде Windows автора Харт Джонсон М

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


Временные серверы для Linux

Из книги Сетевые средства Linux автора Смит Родерик В.

Временные серверы для Linux Сервер NTP для работы в Linux реализуется с помощью программы ntp или ее разновидностей: xntp, xntp3 и xntpd. Символ x в начале имени означает "экспериментальный" (experimental), что не совсем верно, так как эти программы успешно используются в течение нескольких лет.


Временные диаграммы

Из книги OrCAD PSpice. Анализ электрических цепей автора Кеоун Дж.

Временные диаграммы Чтобы получить временные диаграммы входного и выходного напряжений, необходимо слегка изменить входной файл. Как и в предыдущем примере, будет использовано синусоидальное входное напряжение:Vi 1 0 sin (0 0. 5V 5kHz)Наряду с анализом переходных процессов


Анализ переходных процессов (временные диаграммы для JFET)

Из книги Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ автора Борри Хелен

Анализ переходных процессов (временные диаграммы для JFET) Чтобы наблюдать временные диаграммы JFET и сравнивать наши результаты с показанными на рис. 11.8, необходимо заменить тип источника Vs, выбрав VSIN вместо VAC. Сделайте это и задайте следующие значения для нового источника:


Временные значения

Из книги Искусство программирования на языке сценариев командной оболочки автора Купер Мендель

Временные значения CURRENT_CONNECTION и CURRENT_TRANSACTION не имеют смысла вне текущего соединения и контекста транзакции соответственно. Сервер Firebird сохранит самые последние значения этих идентификаторов в заголовочной странице базы данных. После восстановления базы данных из


Временные таблицы

Из книги Linux программирование в примерах автора Роббинс Арнольд

Временные таблицы Firebird не поддерживает временные таблицы, которые управляются системой. Здесь они меньше нужны, чем в других СУБД. Например, у Firebird есть возможность получать виртуальные таблицы напрямую через хранимую процедуру, написанную с использованием


Пример 19-3. Запуск нескольких процессов в подоболочках

Из книги Инфобизнес за один день автора Ушанов Азамат

Пример 19-3. Запуск нескольких процессов в подоболочках (cat list1 list2 list3 | sort | uniq > list123) & (cat list4 list5 list6 | sort | uniq > list456) & # Слияние и сортировка двух списков производится одновременно. # Запуск в фоне гарантирует параллельное исполнение. # # Тот же эффект


12.3. Временные файлы

Из книги Программирование для Linux. Профессиональный подход автора Митчелл Марк


7. Временные рамки

Из книги автора

7. Временные рамки «Как сделать что-то за 15 минут» – это может быть небольшая статья, где вы даете алгоритм решения той или иной проблемы за три минуты. Это очень хорошее название для статей и видео. Вы планируете записать бесплатный каст на 15 минут, в котором


2.1.7. Временные файлы

Из книги автора

2.1.7. Временные файлы Иногда программе требуется создать временный файл, например для промежуточного хранения большого объема данных или для передачи данных другой программе. В системах GNU/Linux временные файлы хранятся в каталоге /tmp. Работая с временными файлами,