Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как сделать таймер? например на 50мс на С++ 
:(
    Опции темы
PILOT
Дата 18.3.2004, 10:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


производство
****


Профиль
Группа: Модератор
Сообщений: 2724
Регистрация: 4.4.2002
Где: москва

Репутация: нет
Всего: 54



Каждые 50-100мс нужно знать какие клавиши были нажаты, отправить блок данных в буффер для обработки в общем цикле...

Спасибо.
СУВ.


--------------------
тут могла быть Ваша реклама...
PM MAIL WWW ICQ   Вверх
bel_nikita
Дата 18.3.2004, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

Репутация: 21
Всего: 47



PILOTIK
под виндой аль нет?

Цитата
Каждые 50-100мс нужно знать какие клавиши были нажаты, отправить блок данных в буффер для обработки в общем цикле...

А зачем опрашивать? Ведь, если клавиша нажата, то есть интеррапт. А если есть интеррапт, то значит можно узнать, что нажатоsmile.gif Зачем опрашивать каждые 50-100 мсек???

PS: Можно складывать клавиши в буффер, а потом, например, после нажатия Enter, проанализировать, что было нажато и т.д. и т.п.


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
shedon
Дата 18.3.2004, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1209
Регистрация: 17.1.2003
Где: Нижнiй Новгородъ

Репутация: 4
Всего: 11



SetTimer запускает таймер
а дальше лови сообщения WM_TIMER


--------------------
Programming is like sex: One mistake and you have to support it your lifetime
PM MAIL WWW ICQ   Вверх
PILOT
Дата 18.3.2004, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


производство
****


Профиль
Группа: Модератор
Сообщений: 2724
Регистрация: 4.4.2002
Где: москва

Репутация: нет
Всего: 54



Извините, я забыл добавить: Borland C++ под DOS.
Прошу прощения.

СУВ.


--------------------
тут могла быть Ваша реклама...
PM MAIL WWW ICQ   Вверх
bel_nikita
Дата 18.3.2004, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

Репутация: 21
Всего: 47



PILOTIK
Так, все же, зачем тебе опрос через каждые 50-100 мсек.
Вставь свой вектор на события клавы, я думаю так лучше будет.
Или тебе именно класс таймера под ДОСом нужен?

Прерывания в MS-DOS

PS: старый, добрый DOS smile.gif Как недавно это было...


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
Guest
Дата 18.3.2004, 17:51 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Не...
мне нужно не именно 50-100мсек - это я для примера дал. Нужно периодическое выполнение процедуры. Со стабильным периодом вызова.
Можно ли считать время, прибавить к нему задданое значение соответствующее нужному мне периоду и сохранить, а в рабочем цикле проверять текущее время превысило то которое я сохранил или нет, если да, то в процедуру обработки.
НО!!!!
Я думал может есть более стандартный и точный (по времени) подход?

СУВ.
  Вверх
bel_nikita
Дата 19.3.2004, 00:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

Репутация: 21
Всего: 47



Можно просто вставить свой вектор в нулевой интеррапт и завести счетчик.
И как только счетчик отработает вызывай свою функцию.
Это самый примитивный, простой и надежный способ.

Я уже точно не помню, как там это по ДОСом, но что-то должно быть похоже на:
Код

//constants for interrupt vectors
#define IRQ0 0x08
#define IRQ1 0x09

volatile static unsigned long IntCounter;

//==INT0
void interrupt int0(__CPPARGS) {
 IntCounter++;
 // НУ ДАЛЬШЕ, ТО ЧТО ХОЧЕШЬ ДЕЛАЕШЬ
}

unsigned char uchOriginalIntMask;
unsigned char uchOriginalIntMask2;

void InitializeInterrupts() {
uchOriginalIntMask=inportb(0x21);
//uchOriginalIntMask2=inportb(0xa1);
//  cprintf("Interrupts initialization.\r\n");getch();
 setvect(IRQ0, int0);
//setvect(IRQ1, int1);
}


А у тебя ПЕНь? Под ПЕНь там еще заморочки разные есть.


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
sergejzr
Дата 19.3.2004, 03:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 19
Всего: 360



Я не знаком с борландом smile.gif , но приходилось работать с таймером на юниксе (alarm(), signal() ) и MSVC++(SetTimer).

Тут инфа на тему. написано, что борланд умеет SetTimer.
Посмотри на всякий случай.
Timer

удачи!



--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Гость_PILOTIK
Дата 19.3.2004, 11:35 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(bel_nikita @ 19.3.2004, 00:38)
А у тебя ПЕНь? Под ПЕНь там еще заморочки разные есть.

Да у меня пень... но заморочек особых н требуется...
У меня опять вопрос:
А как часто будет вызываться прерывание?

СУВ.
  Вверх
bel_nikita
Дата 19.3.2004, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

Репутация: 21
Всего: 47



to Гость_PILOTIK
18,2 раза в секунду, то бишь каждые 55мсек


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.2732 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.