Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.05.2010, 13:55   #1
thomson
Пользователь
 
Регистрация: 27.05.2010
Сообщений: 17
Восклицание проблема с таймерами. функция clock()

возникла проблема. мне нужно для моей программы засечь время исполнения нескольких из функций в тактах. использую clock() из time.h
my_f-просто название для примера, код функции большой и с использованием специализированной библиотеки, поэтому код самой функции не выкладываю(но действия она выполняет, т.е. такты процессора по идее должны тратиться)

Код:
#include <time.h>

void main()
{
....  
  clock_t start,finish;
  double result;
  start=clock();
  my_f();
  finish=clock();
  result = (double)(finish-start);

  printf("%fNumber of clocks for 1 function = ", result);
...
//так же и для 2й функции
 
  start=clock();
  my_f2();
  finish=clock();
  result = (double)(finish-start);

 printf("%fNumber of clocks for 2 function = ", result);
}
в итоге выводит 0 в обоих случаях
документацию читал, все сделал правильно...
з.ы. кому интересно - проект компилился и запускался под MSVS6.0

Последний раз редактировалось thomson; 27.05.2010 в 15:04.
thomson вне форума Ответить с цитированием
Старый 27.05.2010, 14:03   #2
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Попробуйте между измерениями выполнить каждую функцию раз по тысяче, например (в цикле). По моему опыту - точность обычных таймеров порядка десяти миллисекунд и, вполне возможно, что у этого таймера просто не хватает разрешающей способности чтобы отловить время, за которое выполняется функция.
Кстати, оформляйте код не в тег QUOTE, а в CODE - значок # прямо справа от QUOTE.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 27.05.2010, 14:15   #3
thomson
Пользователь
 
Регистрация: 27.05.2010
Сообщений: 17
По умолчанию

Цитата:
Сообщение от Гром Посмотреть сообщение
Попробуйте между измерениями выполнить каждую функцию раз по тысяче, например (в цикле). По моему опыту - точность обычных таймеров порядка десяти миллисекунд и, вполне возможно, что у этого таймера просто не хватает разрешающей способности чтобы отловить время, за которое выполняется функция.
Кстати, оформляйте код не в тег QUOTE, а в CODE - значок # прямо справа от QUOTE.
1. спасибо за совет по оформлению сообщений.
2. я меряю не в секундах(тогда надо было бы делить на CLOCKS_PER_SEC (стандартную С++ константу), а в тактах. функции достаточно громоздкие(т.к. работают с числами большой длины, больше 64 бит).. тем не менее 0
но я попробую и напишу результат
ещё какие-нибудь предположения и догадки?
thomson вне форума Ответить с цитированием
Старый 27.05.2010, 14:36   #4
mrChester
Я
Форумчанин
 
Аватар для mrChester
 
Регистрация: 24.04.2010
Сообщений: 693
По умолчанию

Одну ошибку точно вижу
Код:
printf("Number of clocks for 1 function = %5.3f", result);
Все персонажи вымышлены, все совпадения случайны.
Если жизнь игра, тогда я её разработчик ©.
mrChester вне форума Ответить с цитированием
Старый 27.05.2010, 14:45   #5
thomson
Пользователь
 
Регистрация: 27.05.2010
Сообщений: 17
По умолчанию

исправил, но прогу, представленную на форуме, я писал по памяти... в коде действительно стоит %f но это ситуацию не спасает, пробовал и через int, ulong и т.д.
суть проблемы остается та же - 0 тактов!
алгоритм(фунции) один и тот же, только описан разными методами. но 0 там точно не может быть!
thomson вне форума Ответить с цитированием
Старый 27.05.2010, 14:59   #6
mrChester
Я
Форумчанин
 
Аватар для mrChester
 
Регистрация: 24.04.2010
Сообщений: 693
По умолчанию

Попробуй приостановить отладку в на той строчке где вывод и посмотри значение result, если равно 0, тогда посмотри значения переменных start и finish. Второе объявление:
Код:
clock_t start,finish;
думаю лишнее. А вообще, кажется все правильно
Все персонажи вымышлены, все совпадения случайны.
Если жизнь игра, тогда я её разработчик ©.
mrChester вне форума Ответить с цитированием
Старый 27.05.2010, 15:05   #7
thomson
Пользователь
 
Регистрация: 27.05.2010
Сообщений: 17
По умолчанию

Цитата:
Сообщение от mrChester Посмотреть сообщение
Попробуй приостановить отладку в на той строчке где вывод и посмотри значение result, если равно 0, тогда посмотри значения переменных start и finish. Второе объявление:
Код:
clock_t start,finish;
думаю лишнее. А вообще, кажется все правильно
сори. надо было сразу код сюда скопипастить. проверил-я не переинициализировал переменные в своей проге
thomson вне форума Ответить с цитированием
Старый 27.05.2010, 17:13   #8
thomson
Пользователь
 
Регистрация: 27.05.2010
Сообщений: 17
По умолчанию

если кто-то знает другой метод замера времени - прошу рассказать.
условие - он должен быть достаточно точным, чтобы показать количество тактов, за которое выполняется функция
thomson вне форума Ответить с цитированием
Старый 27.05.2010, 17:17   #9
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Вот здесь видел - упоминалась функция rdtsc. Самолично про нее ничего сказать не могу.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 27.05.2010, 18:49   #10
thomson
Пользователь
 
Регистрация: 27.05.2010
Сообщений: 17
По умолчанию

конечно с подключением асма - это яд(я асм не очень перевариваю(плохое отношение), но код читать могу)
rdtsc() помогла
спасибо за ссылку, уже потестил на простых примерах, осталось в свою прогу вставить
единственное - я так понял, что человек сам функцию писал, т.к. в MSDN она есть, написано каой header подсоединять, но что-то "моя твоя не понимай", типа нету такого
но решение нашел.
thomson вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Блок-схема программы с таймерами BigQuestion Помощь студентам 2 07.04.2010 11:04
C++ проблема с таймерами ManInBlack Помощь студентам 0 25.12.2009 19:41
Помогите с таймерами C++ liosha Win Api 1 25.10.2009 10:44
Функция GetAsyncKeyState(). Проблема проекта. Fabio Общие вопросы C/C++ 2 07.03.2009 09:12
Работа с таймерами Mr. Demetrius JavaScript, Ajax 7 16.03.2008 22:29