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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.03.2013, 04:23   #1
Zarc
 
Регистрация: 19.02.2012
Сообщений: 5
Вопрос Windows таймер с точностью до микро(нано)секунд с callback-функцией.

Здравствуйте!
Собственно, нужно отcчитывать короткие промежутки времени - в микросекундах (а лучше - в наносекундах) - и по истечении времени вызывать мою функцию. Пишу в Visual Studio 2012. Гугль ничего подходящего не выдал, однако, нашел реализацию на C#, а также для Linux.

Может кто подскажет, нет ли готового решения?
Zarc вне форума Ответить с цитированием
Старый 23.03.2013, 08:11   #2
Ezhik Kihze
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 639
По умолчанию

Виндовс не система реального времени. Максимум, что можно получить это http://msdn.microsoft.com/ru-RU/libr...(v=vs.85).aspx и rdtsc. Но учтите, что фиксированныо 13 микросекунд (например) вы не получите.
ICQ: 677936656 Gmail: ekEmbed@gmail.com
Ezhik Kihze вне форума Ответить с цитированием
Старый 23.03.2013, 11:40   #3
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от Zarc Посмотреть сообщение
Здравствуйте!
Собственно, нужно отcчитывать короткие промежутки времени - в микросекундах (а лучше - в наносекундах) - и по истечении времени вызывать мою функцию. Пишу в Visual Studio 2012. Гугль ничего подходящего не выдал, однако, нашел реализацию на C#, а также для Linux.

Может кто подскажет, нет ли готового решения?
Я как раз занимаюсь этим вопросом. У меня уже есть наработка под виндовс

1. Поскольку виндовс не является системой реального времени, то точность таймера все равно скачет. Однако, это официально признанная максимально возможная точность таймера.

2. У меня уже есть готовое решение под виндовс, однако мне по задаче нужно кросс-платформенное решение для компилятора вижал студии и гцц.

3. Пользователь задает(получает) время в секундах, хотя внутренняя реализация оперирует микросекундами (линукс), и тактами процессора (виндовс)

Если есть такое пожелание: можно добавить поддержку микросекунд. Тогда пользователь по желанию сможет оперировать таймером в секундах, или в микросекундах.

(сейчас секунды можно просто конвертировать в микросекунды)

4. Если некогда ждать, то под виндовс могу прям щас сырую недоделку выложить (работает только под виндовс).

5. Если подождешь (ориентировочно - 1-3 часа), тогда я могу выложить кросс-платформенный таймер (компиляторы вижал студии/гцц) протестированные пакетом гугл-тестов.

6. Есть поддержка добавления простейшей колл-бэк функции. Свободная функция, имеющая прототип вида: void Event(const Timer& timer);
При срабатывании будильника, таймер запустит функцию пользователя, и в качестве аргумента передаст туда самого себя.

(указывать коллбек не обязательно).

7. Если есть пожелание: для 11 стандарта можно добавить колл-бек с возможностью нацеливаться на методы классов.

8. Через 3-4 недели у меня будет время допилить механизм "коннектор", который является делегатом, и умеет нацеливаться на любые функции/методы и для 2003 и для 11 стандартов.
И я добавлю уже полноценную поддержку колл-бека.

Последний раз редактировалось _Bers; 23.03.2013 в 11:43.
_Bers вне форума Ответить с цитированием
Старый 23.03.2013, 12:31   #4
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

во-первых - туточки, во-вторых - то что не realtime os это еще полбеды, почему так мелочитесь - нано, давайте уже пико (при том, что ГТИ на материнке не термостатирован и там далеко не DDS)
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 24.03.2013, 18:40   #5
Zarc
 
Регистрация: 19.02.2012
Сообщений: 5
По умолчанию

Цитата:
Сообщение от _Bers Посмотреть сообщение
Если некогда ждать, то под виндовс могу прям щас сырую недоделку выложить (работает только под виндовс).
Да, с удовольствием бы посмотрел, что у вас получилось. Время то пока терпит, но на на днях всё равно придётся решать этот вопрос.
Zarc вне форума Ответить с цитированием
Старый 24.03.2013, 18:50   #6
Zarc
 
Регистрация: 19.02.2012
Сообщений: 5
По умолчанию

Цитата:
Сообщение от raxp Посмотреть сообщение
во-первых - туточки, во-вторых - то что не realtime os это еще полбеды, почему так мелочитесь - нано, давайте уже пико (при том, что ГТИ на материнке не термостатирован и там далеко не DDS)
Спасибо за ссылочку, я понял, что двигаться надо в сторону мультимедийного таймера. А про наносекудны действительно загнул (хотя вычисления придётся округлять), но это не критично.
Zarc вне форума Ответить с цитированием
Старый 24.03.2013, 18:58   #7
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

...дочитайте тему до конца, пост.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 24.03.2013, 22:53   #8
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

а зачем, если не секрет, вообще нужно знать время настолько точно?

знаю только, что OpenGL на некоторых видеокартах может время мерять в наносекундах, но только для оценки производительности шейдера, либо для синхронизации выполнения шейдера.
f.hump вне форума Ответить с цитированием
Старый 24.03.2013, 23:15   #9
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

...некоторые с железяками работают.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 24.03.2013, 23:24   #10
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

а на железяках своих таймеров нет? в драйвере обработчик на событие железяки не прописать с каким-нибудь приоритетным IRQ левелом?
f.hump вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
программирование микро контроллеров revaldo666 Общие вопросы C/C++ 10 22.05.2012 23:20
вызов callback Vistar Общие вопросы .NET 9 24.10.2010 14:49
Callback из dll - как? flug Общие вопросы Delphi 2 30.09.2010 13:13
Проблема с Микро СД DRAGGER Компьютерное железо 1 21.10.2009 08:52
Callback Wolfheart Win Api 12 02.06.2007 23:13