информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Страшный баг в WindowsПортрет посетителяSpanning Tree Protocol: недокументированное применение
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[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;
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach