Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
| |
[C++] мне бы просто время узнать 03.12.04 12:14 Число просмотров: 2128
Автор: vaborg <Israel Vaborg> Статус: Elderman
|
> Если под виндами, то может тебе понравится инструкция > RDTSC? Пишет в EDX:EAX 64-битное значение внутреннего > счётчика микропроцессора, увеличивающегося с каждым его > тактом. > > Кроме того, для виндов можно поюзать > QueryPerformanceCounter и проч. в миллисекундах и все.
платформа intel
хотелось бы остаться в рамках стандарта .
|
<programming>
|
[C++] узнать прошедшее время в миллисекундах 03.12.04 11:36
Автор: vaborg <Israel Vaborg> Статус: Elderman
|
туплю не по-детски :)
хочу узнать время работы блока
делаю так
time_t t1,t2;
time(&t1);
блок кода
time(&t2);
printf("%f seconds",difftime(t2,t1));
но время получаем в секундах а мне бы еще и миллисекунды туда же
как сделать?
|
|
Предложу свой механизм: 03.12.04 12:52
Автор: DPP <Dmitry P. Pimenov> Статус: The Elderman
|
> туплю не по-детски :) > хочу узнать время работы блока > делаю так
Предложу свой механизм:
А для начала правило: все зависит от ОС. Поясню - некоторые ОС не дадут прямой доступ к таймеру, а в некоторых все уже реализовано, только эти функции не стандартизированы в С.
Дажа два варианта:
Первый - в <time.h> есть описание функции clock() и определение CLK_TCK, который определяет дискретность измерения времени функцией clock(). возможны "подводные камни": В некоторых реализациях С единица времени 1/18.2, в некоторых 1/50, в некоторых 1/100, в некоторых 1/1000 секунды. Причем замечено что там, где 1/1000 или что-то в этом духе, там само возвращаемое значение может меняться с бОльшей дискретностью, чем "1".
Второй - можно воспользоваться счетчиком тактов (только для пентиумов, их клонов и выше). На гигагерцовом процессоре время можно измерять с точностью до наносекунд. А в Вашем случае можно и отойти от времени, поскольку для вашей задачи вполне может хватить самого счетчика тактов.
С таймером лучше не связываться, хотя он "тикает" с частотой чуть больше мегагерца (точность - микросекунды).
> time_t t1,t2; > > time(&t1); > > блок кода > > time(&t2); > printf("%f seconds",difftime(t2,t1)); > но время получаем в секундах а мне бы еще и миллисекунды > туда же > как сделать?
|
| |
Спасибо 03.12.04 12:54
Автор: vaborg <Israel Vaborg> Статус: Elderman
|
так и сделал.
Только не надо ко мне на Вы :)
|
|
[C++] Тебе для отладки производительности, или действительно нужны миллисекунды? Платформа какая? Intel? 03.12.04 12:02
Автор: HandleX <Александр М.> Статус: The Elderman
|
> туплю не по-детски :) > хочу узнать время работы блока > делаю так > > time_t t1,t2; > time(&t1); > блок кода > time(&t2); > printf("%f seconds",difftime(t2,t1)); > но время получаем в секундах а мне бы еще и миллисекунды > туда же > как сделать? Если под виндами, то может тебе понравится инструкция RDTSC? Пишет в EDX:EAX 64-битное значение внутреннего счётчика микропроцессора, увеличивающегося с каждым его тактом.
Кроме того, для виндов можно поюзать QueryPerformanceCounter и проч.
Про RDTSC
|
| |
[C++] мне бы просто время узнать 03.12.04 12:14
Автор: vaborg <Israel Vaborg> Статус: Elderman
|
> Если под виндами, то может тебе понравится инструкция > RDTSC? Пишет в EDX:EAX 64-битное значение внутреннего > счётчика микропроцессора, увеличивающегося с каждым его > тактом. > > Кроме того, для виндов можно поюзать > QueryPerformanceCounter и проч. в миллисекундах и все.
платформа intel
хотелось бы остаться в рамках стандарта .
|
| | |
[C++] Вот выдержка из «Язык C в вопросах и ответах». 03.12.04 12:30
Автор: HandleX <Александр М.> Статус: The Elderman
|
Q: Как реализовать задержку или определить время реакции пользователя,
чтобы погрешность была меньше секунды?
A: У этой задачи нет, к несчастью, нет мобильных решений. Unix V7 и ее производные имели весьма полезную функцию ftime() c точностью до миллисекунды, но она исчезла в System V и Posix. Поищите такие функции: nap(), setitimer(), msleep(), usleep(), clock(), и gettimeofday(). Вызовы select() и poll() (если эти функции доступны) могут быть добавлены к сервисным функциям для создания простых задержек. В системе MS-DOS возможно перепрограммирование системного таймера и прерываний таймера.
|
| | | |
[C++] действительно так и есть 03.12.04 12:53
Автор: vaborg <Israel Vaborg> Статус: Elderman
|
относительно ftime из mana
НАЙДЕННЫЕ ОШИБКИ
Эта функция устарела. Не используйте ее. В случаях, когда достаточно секунд, можно использовать
time(2); gettimeofday(2) позволяет работать с микросекундами; clock_gettime(3) позволяет работать с
наносекундами, однако пока что еще не очень широко распространена.
При работе с libc4 и libc5 поле millitm представляет для пользователя особый интерес. Но ранние
версии glibc2 работают некорректно и возвращает в этом поле нулевое значение; начиная с glibc 2.1.1
эта ошибка исправлена.
поэтому я про нее ничего и не спрашивал :)
через clock вполне хорошее решение - число тактов на секунду достаточно неплохо показывает то что надо.
|
| | |
все нашел! :) 03.12.04 12:22
Автор: vaborg <Israel Vaborg> Статус: Elderman
|
#include <time.h>
clock_t start, end;
double elapsed;
start = clock();
. . .
end = clock();
elapsed=((double)(end-start))/CLOCKS_PER_SEC;
|
|
|