Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > 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
Цитата

Это работает на *nix платформах. В Винде не уверен. 
 Мне как раз ее и надо, спасибо, буду читать.

Автор: 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
но не работает. вроде, подключать ничего не надо...
пишу 

Код

sleep 5 [s];


отвечает: test3.cpp:184: error: expected ‘;’ before numeric constant....

Автор: ller 14.4.2011, 13:32
Цитата(ConverterDU @  14.4.2011,  12:30 Найти цитируемый пост)
кажется, нашел..

Это для командной строки
#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
Цитата

sleep() работает в секундах
usleep() в милисекундах
nanosleep() соответственно наносекунды 



ller, спасибо огромное!

Автор: bsa 14.4.2011, 21:57
Цитата(ller @  14.4.2011,  13:32 Найти цитируемый пост)
On Windows NT/2000/XP/2003/Vista/7/2008, waitable timers with 100-nanosecond resolution are available, so nanosleep() has 100-nanosecond accuracy. 

Относится к какой-то левой библиотеке. Под Windows можно получить точность ожидания выше, чем с кратностью ~20 мс, то необходимо использовать Performance Counters.

Автор: ConverterDU 15.4.2011, 13:20
Цитата

Относится к какой-то левой библиотеке. Под Windows можно получить точность ожидания выше, чем с кратностью ~20 мс, то необходимо использовать Performance Counters. 


bsa, что относится к левой библиотеке? Эта функция?

Автор: bsa 15.4.2011, 13:32
Цитата(ConverterDU @  15.4.2011,  13:20 Найти цитируемый пост)
bsa, что относится к левой библиотеке? Эта функция? 

Речь про Windows. В Linux, nanosleep штатная.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)