![]() |
|
Модераторы: bsa |
![]()
|
|
| ConverterDU |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 82 Регистрация: 18.2.2011 Репутация: нет Всего: нет |
Здравствуйте! Где можно почитать как работает таймер на физическом уровне и как он реализуется.....гуглил, но ничего толкового не нашел! Может ссылка есть на нормальный источник!
Спасибо! |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
ConverterDU, есть такая штука, называется кварцевый резонатор. Он имеется на каждой микропроцессорной плате. Необходим для поддержания заданной тактовой частоты. Затем есть такая хрень, которая зовется "делитель". Это такой счетчик, который считает такты, а после того, как будет насчитано некое заданное их число, он сам генерирует такт и сбрасывается в 0. В итоге, ты можешь из 1 МГц, получить 1 кГц. Далее, этот 1 кГц заводится на определенную ножку процессора, которая называется в общем случае Interrupt Request (IRQ). Когда возникает на ней такт, процессор прерывается и выполняет некую задачу - обработчик прерывания. Этот обработчик увеличивает некий счетчик. Твой программа его считывает и считает его таймером.
На самом деле, реализаций может быть куча. И в каждой платформе и ОС делается по-разному. Но общий смысл именно такой. Где-то есть постоянный генератор импульсов, а где-то есть счетчик, который система предоставляет программе в виде таймера. Это сообщение отредактировал(а) bsa - 13.4.2011, 16:46 |
|||
|
||||
| ConverterDU |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 82 Регистрация: 18.2.2011 Репутация: нет Всего: нет |
bsa, спасибо. Я там просто сначала запутался где кварцевый резонатор, а где кварцевый генератор, а сейчас еще почитал про это и, в принципе, все понятно. А как это в С++ можно сделать? Я на cplusplus.com смотрел, но так и не понял при помощи какой из них я могу просто сделать задержку выполнения какой-либо функции на заданное время! Может перевел неверно.
Это сообщение отредактировал(а) ConverterDU - 14.4.2011, 00:05 |
|||
|
||||
| ller |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 325 Регистрация: 4.8.2008 Где: г. Таганрог Репутация: 2 Всего: 4 |
sleep() usleep()
Читай в этом направлении. Это работает на *nix платформах. В Винде не уверен. |
|||
|
||||
| ConverterDU |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 82 Регистрация: 18.2.2011 Репутация: нет Всего: нет |
|
|||
|
||||
| ConverterDU |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 82 Регистрация: 18.2.2011 Репутация: нет Всего: нет |
а какой заголовочный надо для Sleep? Я вот здесь нашел http://forum.vingrad.ru/forum/topic-133184.html такой вопрос, но там <windows.h>...
Это сообщение отредактировал(а) ConverterDU - 14.4.2011, 12:14 |
|||
|
||||
| ConverterDU |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 82 Регистрация: 18.2.2011 Репутация: нет Всего: нет |
кажется, нашел..
Добавлено через 10 минут и 9 секунд нашел, что использовать так: Usage: sleep NUMBER[SUFFIX]... or: sleep OPTION но не работает. вроде, подключать ничего не надо... пишу
отвечает: test3.cpp:184: error: expected ‘;’ before numeric constant.... |
|||
|
||||
| ller |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 325 Регистрация: 4.8.2008 Где: г. Таганрог Репутация: 2 Всего: 4 |
Это для командной строки #include <time.h> int nanosleep(const struct timespec *req, struct timespec *rem); On Windows NT/2000/XP/2003/Vista/7/2008, waitable timers with 100-nanosecond resolution are available, so nanosleep() has 100-nanosecond accuracy. ps google рулит! |
|||
|
||||
| ConverterDU |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 82 Регистрация: 18.2.2011 Репутация: нет Всего: нет |
блин, как вы в нем находете....я ж тоже искал, как так то.....видимо коряво искал...
|
|||
|
||||
| ConverterDU |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 82 Регистрация: 18.2.2011 Репутация: нет Всего: нет |
вобщем сделал так:
#include <unistd.h> , а потом sleep (5);. Единственно, что вот не знаю, как в мсек. указать... Добавлено через 10 минут и 57 секунд просто дробное указал.. |
|||
|
||||
| ller |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 325 Регистрация: 4.8.2008 Где: г. Таганрог Репутация: 2 Всего: 4 |
sleep() работает в секундах
usleep() в милисекундах nanosleep() соответственно наносекунды |
|||
|
||||
| ConverterDU |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 82 Регистрация: 18.2.2011 Репутация: нет Всего: нет |
ller, спасибо огромное! |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Относится к какой-то левой библиотеке. Под Windows можно получить точность ожидания выше, чем с кратностью ~20 мс, то необходимо использовать Performance Counters. |
|||
|
||||
| ConverterDU |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 82 Регистрация: 18.2.2011 Репутация: нет Всего: нет |
bsa, что относится к левой библиотеке? Эта функция? |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Речь про Windows. В Linux, nanosleep штатная. |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |