Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Длительность операции в миллисекундах


Автор: JoeBlack 12.10.2006, 13:04
Доброе время суток!
Можно подсчитать время выполнения чего-то( всей проги или какой-то части ее) в секундах. Возможно ли более мелкое деление (миллисекунды, например..)? Или, что еще лучше, в тактах.... Хотя, за один такт может выполняться несколько операций ( если правильно помню). 
Спасибо!

Автор: Romikgy 12.10.2006, 13:18
легко 
GetTickCount()
до операции и после , разница между ними и будет, то что те нужно

Автор: Athlon 12.10.2006, 13:20
Еще можно использовать GetSystemTime, если операция достаточно длительная

Автор: Дрон 12.10.2006, 13:39
QueryPerformanceFrequency и QueryPerformanceCounter -- конечно, не такты, но точность хоть куда smile

Добавлено @ 13:39 
А вообще сто раз уже спрашивали. На форуме ведь есть поиск smile

Автор: Мяут 12.10.2006, 13:54
Код

#include <sys/time.h>

clock_t start = clock(), end;
//...
end = clock();
printf("Execution time: %.2f ms", float(end-start)*1000/CLOCKS_PER_SEC);


Насчет тактов - не уверен  smile 

Автор: JoeBlack 12.10.2006, 15:21
Спасибо за помощь! А Дрон отдельное спасибо за нагоняй..))))) Действительно посмотрел потом, была такая тема...Только я почему-то был уверен, что это мало кому понадобится. Посему, если и спрашивали, то скорей всего речь шла лишь о секундах...
Спасибо!!!!!

Автор: vinter 12.10.2006, 16:22
Цитата

printf("Execution time: %.2f ms", float(end-start)*1000/CLOCKS_PER_SEC);

зачем сначала делить н 1000, а потом умножать на нее же??

Автор: JackYF 12.10.2006, 16:55
Ну, кстати, не факт же, что CLOCK_PER_SEC равно именно 1000. В моей реализации тоже так, но мало ли...
Стандарт есть стандарт... Переносимость того стоит, ИМХО.

Автор: vinter 12.10.2006, 17:11
секунды это международный стандарт, а ф-ия clock() дает значение в миллисекундах, так что значение 
Цитата

CLOCK_PER_SEC

может изменится, только если у человечества изменится представление о времени ИМХО

Автор: Мяут 12.10.2006, 19:45
Цитата(vinter @  12.10.2006,  17:11 Найти цитируемый пост)
может изменится, только если у человечества изменится представление о времени ИМХО 

Жертовать переносимостью ради дополнительных действий компилятора (уверен, что он проглотит конструкцию *1000/1000 не подавившись?  smile 

Цитата(vinter @  12.10.2006,  17:11 Найти цитируемый пост)
может изменится, только если у человечества изменится представление о времени ИМХО 

У человечества - нет. У процессоров - да  smile 

Автор: JackYF 12.10.2006, 20:05
В дополнение к Мяут'у:

Цитата(vinter @  12.10.2006,  17:11 Найти цитируемый пост)
значение в миллисекундах,


Функция clock() не дает "значение в миллисекундах"! В каком стандарте ты это вычитал?
Я, когда разбирался с этой функцией, такого не увидел...



Автор: vinter 12.10.2006, 21:36
Цитата

Функция clock() не дает "значение в миллисекундах"! В каком стандарте ты это вычитал?
Я, когда разбирался с этой функцией, такого не увидел...

кроме С'шного стандарта существует еще метрологические стандарты.. и в них как раз описано , что приставка милли есть ничто иное как 10^-3 , при делении на CLOCK_PER_SEC мы получаем значение в секундах, я думаю дальше объяснять не нужно smile 

Автор: JackYF 13.10.2006, 16:39
Цитата(vinter @  12.10.2006,  21:36 Найти цитируемый пост)
Цитата

Функция clock() не дает "значение в миллисекундах"! В каком стандарте ты это вычитал?
Я, когда разбирался с этой функцией, такого не увидел...

кроме С'шного стандарта существует еще метрологические стандарты.. и в них как раз описано , что приставка милли есть ничто иное как 10^-3 , при делении на CLOCK_PER_SEC мы получаем значение в секундах, я думаю дальше объяснять не нужно smile


Я знаю, что такое приставка милли  smile 
Просто, извини, я не видел слово миллисекунды в описании функции. Откуда ты точно знаешь, что она отдает миллисекунды? Из размеры константы CLOCKS_PER_SEC ?  smile

Добавлено @ 16:40 
РазмерА smile

Добавлено @ 16:40 
А точнее, значения...

Автор: vinter 13.10.2006, 17:28
Цитата

 Откуда ты точно знаешь, что она отдает миллисекунды?  

ну не прям точно smile , просто в программирование все логично, и я думаю здесь точно так же smile 
Цитата

Из размеры константы CLOCKS_PER_SEC ?

да

Автор: Romikgy 13.10.2006, 23:21
vinter, имхо точнее будет даже 
Цитата(Romikgy @  12.10.2006,  12:18 Найти цитируемый пост)
GetTickCount()

нежели
Цитата(JackYF @  13.10.2006,  15:39 Найти цитируемый пост)
clock()

т.к. клок выдает время в секундах, а ты переводишь в милисекунды!
а геттиккаунт сразу выдает в милисекундах 
Цитата(vinter @  13.10.2006,  16:28 Найти цитируемый пост)
 все логично

 smile 

Автор: vinter 14.10.2006, 07:45
Цитата

т.к. клок выдает время в секундах

наоборот выдает он как-раз в миллисекундах, а переводят в секунды.

Автор: Romikgy 14.10.2006, 10:52
vinter, одно меня смущает 
Код

#include <time.h>
clock_t clock(void);

Description
Determines processor time.
clock can be used to determine the time interval between two events. To determine the time in seconds, the value returned by clock should be divided by the value of the macro CLK_TCK.


нигде не говорится что время возвращеное этой ф_цией является милисекундами smile
в макрос CLK_TCK имхо может всунутся все что угодно , хотя под винду вроде как это 1000

Автор: JackYF 16.10.2006, 15:15
Цитата(Romikgy @  13.10.2006,  23:21 Найти цитируемый пост)
.к. клок выдает время в секундах, а ты переводишь в милисекунды!
а геттиккаунт сразу выдает в милисекундах 


Нет, все-таки clock() выдает время не в секундах, а в "клоках", коих в секунду CLOCKS_PER_SEC...
Но это так...

ИМХО, обсуждение закончено.

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