| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > Таймер |
| Автор: ConverterDU 13.4.2011, 16:32 |
| Здравствуйте! Где можно почитать как работает таймер на физическом уровне и как он реализуется.....гуглил, но ничего толкового не нашел! Может ссылка есть на нормальный источник! Спасибо! |
| Автор: bsa 13.4.2011, 16:43 |
| ConverterDU, есть такая штука, называется кварцевый резонатор. Он имеется на каждой микропроцессорной плате. Необходим для поддержания заданной тактовой частоты. Затем есть такая хрень, которая зовется "делитель". Это такой счетчик, который считает такты, а после того, как будет насчитано некое заданное их число, он сам генерирует такт и сбрасывается в 0. В итоге, ты можешь из 1 МГц, получить 1 кГц. Далее, этот 1 кГц заводится на определенную ножку процессора, которая называется в общем случае Interrupt Request (IRQ). Когда возникает на ней такт, процессор прерывается и выполняет некую задачу - обработчик прерывания. Этот обработчик увеличивает некий счетчик. Твой программа его считывает и считает его таймером. На самом деле, реализаций может быть куча. И в каждой платформе и ОС делается по-разному. Но общий смысл именно такой. Где-то есть постоянный генератор импульсов, а где-то есть счетчик, который система предоставляет программе в виде таймера. |
| Автор: ConverterDU 14.4.2011, 00:03 |
| bsa, спасибо. Я там просто сначала запутался где кварцевый резонатор, а где кварцевый генератор, а сейчас еще почитал про это и, в принципе, все понятно. А как это в С++ можно сделать? Я на cplusplus.com смотрел, но так и не понял при помощи какой из них я могу просто сделать задержку выполнения какой-либо функции на заданное время! Может перевел неверно. |
| Автор: ller 14.4.2011, 10:03 |
| sleep() usleep() Читай в этом направлении. Это работает на *nix платформах. В Винде не уверен. |
| Автор: ConverterDU 14.4.2011, 10:08 | ||
|
| Автор: ConverterDU 14.4.2011, 12:13 |
| а какой заголовочный надо для Sleep? Я вот здесь нашел http://forum.vingrad.ru/forum/topic-133184.html такой вопрос, но там <windows.h>... |
| Автор: ConverterDU 14.4.2011, 12:30 | ||
| кажется, нашел.. Добавлено через 10 минут и 9 секунд нашел, что использовать так: Usage: sleep NUMBER[SUFFIX]... or: sleep OPTION но не работает. вроде, подключать ничего не надо... пишу
отвечает: test3.cpp:184: error: expected ‘;’ before numeric constant.... |
| Автор: ller 14.4.2011, 13:32 |
Это для командной строки #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 14.4.2011, 14:05 |
| блин, как вы в нем находете....я ж тоже искал, как так то.....видимо коряво искал... |
| Автор: ConverterDU 14.4.2011, 14:24 |
| вобщем сделал так: #include <unistd.h> , а потом sleep (5);. Единственно, что вот не знаю, как в мсек. указать... Добавлено через 10 минут и 57 секунд просто дробное указал.. |
| Автор: ller 14.4.2011, 15:57 |
| sleep() работает в секундах usleep() в милисекундах nanosleep() соответственно наносекунды |
| Автор: ConverterDU 14.4.2011, 16:03 | ||
ller, спасибо огромное! |
| Автор: ConverterDU 15.4.2011, 13:20 | ||
bsa, что относится к левой библиотеке? Эта функция? |
| Автор: bsa 15.4.2011, 13:32 |
Речь про Windows. В Linux, nanosleep штатная. |