информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Портрет посетителяСетевые кракеры и правда о деле ЛевинаВсе любят мед
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Microsoft обещает радикально усилить... 
 Ядро Linux избавляется от российских... 
 20 лет Ubuntu 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
все нашел! :) 03.12.04 12:22  Число просмотров: 2325
Автор: vaborg <Israel Vaborg> Статус: Elderman
<"чистая" ссылка>
#include <time.h>
clock_t start, end;
double elapsed;
start = clock();
. . .
end = clock();
elapsed=((double)(end-start))/CLOCKS_PER_SEC;
<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;
1




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


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