Visual C ++: как узнать время процессора? - PullRequest
1 голос
/ 09 апреля 2009

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

Ответы [ 5 ]

2 голосов
/ 09 апреля 2009

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

NTSTATUS hStatus;
SYSTEM_PERFORMANCE_INFORMATION             stSysPerfInfo;

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

Или взгляните на этот «TaskManager»

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

1 голос
/ 09 апреля 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;
}

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

0 голосов
/ 09 апреля 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

0 голосов
/ 09 апреля 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

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

0 голосов
/ 09 апреля 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...