Visual C++: как получить процессорное время?

Как я могу программно найти время ЦП, которое отображается в System Idle Process (в диспетчере задач) с помощью Visual C++?


person subbu    schedule 09.04.2009    source источник


Ответы (5)


То, что вы хотите, это что-то вроде этого...

NTSTATUS hStatus;
SYSTEM_PERFORMANCE_INFORMATION             stSysPerfInfo;

hStatus = NtQuerySystemInformation(SystemPerformanceInformation, &stSysPerfInfo, sizeof(stSysPerfInfo), NULL);
if (hStatus != NO_ERROR)
{
  // Do work....
}

Или взгляните на этот "Диспетчер задач"

http://reactos.freedoors.org/Reactos%200.3.8/ReactOS-0.3.8-REL-src/base/applications/taskmgr/

person João Augusto    schedule 09.04.2009

У меня нет окон, чтобы действительно знать, в чем вопрос, но, возможно, вы можете заглянуть в стандартную функцию std:: clock для измерения затраченного процессорного времени. Если вы запрашиваете это время дважды, количество тиков за истекший период времени можно преобразовать в секунды с помощью константы CLOCKS_PER_SEC.

Результатом будет время ЦП, потраченное вашим процессом, которое будет отличаться от настенных часов. Он может быть выше в многопоточных приложениях или ниже, если ваш код _sleep_s, так как он не будет тратить время.

void f()
{
   std::clock_t init = std::clock();
   // perform some operations
   std::clock_t end = std::clock();
   std::cout << end-init << " cpu ticks spent, or about " 
             << (end-init)/CLOCKS_PER_SEC << " seconds." << std::endl;
}

Это не будет учитывать время ЦП перед первым измерением, но может дать вам точное измерение стандартным способом.

person David Rodríguez - dribeas    schedule 09.04.2009

Никогда не пробовал, но GetProcessTimes кажется путь.

person Timbo    schedule 09.04.2009

Я бы использовал счетчики производительности WMI, в частности Process/%ProcessorTime/Idle.

Прочитайте эту статью, чтобы узнать, как это сделать на C# http://www.codeproject.com/KB/dotnet/perfcounter.aspx

и в C++: http://msdn.microsoft.com/en-us/library/aa394558(VS.85).aspx

Надеюсь, что это ответ на ваш вопрос.

person miPwn    schedule 09.04.2009

Также см. мой пост на эту тему: http://osequal.blogspot.com/2009/03/accurate-time-measurement-for.html . В частности, проверьте реализацию tick_count в библиотеке Intel TBB: http://cc.in2p3.fr/doc/INTEL/tbb/doc/html/a00199.html

person amit    schedule 09.04.2009