Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Problem with clock() and long running programs


Автор: alex35 26.3.2008, 08:36
Здравствуйте!

Пожалуйста, подскажите как замерить время процессора (не системное время) для программы, при условии что время выполнения может быть много часов ?
Стандартное использование clock() из библиотеки ctime,например:

clock_t startTimer, endTimer;
startTimer=clock()
//
//my program here
//
endTimer=clock();
runseconds = (double)(endTimer-startTimer)/CLOCKS_PER_SEC;

не работает (по крайней мере на моем Linux), т.к. clock_t всего 32 бита (соответствует типу int), и следовательно при 
CLOCKS_PER_SEC=1000000 (в моей системе), 
clock() сбросится через менее чем 3000 сек, или около того.

Заранее спасибо  за Вашу помощь.

Автор: korian 26.3.2008, 08:45
ну я так понимаю, что при многочасовой работе программы, необходимость знания микросекунд отпадает.
поэтому вместо clock(), используем time()
можно совместить два метода и выводить clock для не долгой работы и time для длительной.
на скока я знаю clock() выводит пройденное время с момента старта программы (в том смысле, что не зависит от того, сколько времени процессор уделил этому процессу)...
или под Linux clock() работает как-то по другому?

Автор: Andrey44 26.3.2008, 08:51
Код

DWORD dwOldTime = GetTickCount();
DoSomething();
DWORD dwTimeElapsed = GetTickCount() – dwOldTime;



Можно так попробовать smile 

Автор: alex35 26.3.2008, 09:00
1) необходимости в миллисекундах нет, это Вы верно заметили, однако time() измеряет как раз системное время, а на машине запускается много различных программ одновременно, это сервер; мне же нужно замерить именно процессорное время моей программы только.
2) программа запущена на Юникс, g++, не могу использовать библиотеки Windows.

Автор: korian 26.3.2008, 09:07
Цитата(alex35 @  26.3.2008,  08:00 Найти цитируемый пост)
мне же нужно замерить именно процессорное время моей программы только

как я уже наредоктировал выше, по моему clock тоже не решает этой проблемы.
имху надо использовать функции оси для этих целей.

Автор: korian 26.3.2008, 09:27
в Windows для таких целей существует GetProcessTimes и GetThreadTimes.
имху, задайте вопрос в ветку про линукс, чтобы узнать как получать именно процессорное время.

Автор: xvr 26.3.2008, 14:53
Используй функцию times или getrusage

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)