| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > прерывание getch() |
| Автор: box 3.4.2015, 20:20 |
| всем привет! кто нибудь знает можно ли как сделать прерывание опроса клавы раз в секунду и вызвать подпрограмму тобиш надо что бы функция getch() вызывала подпрограмму раз в секунду а то она морозит выполнение всего ядра пока не нажмеш кнопку |
| Автор: feodorv 3.4.2015, 21:35 |
Простите, ядра чего? Я бы использовал select на STDIN. |
| Автор: box 3.4.2015, 22:02 | ||
смотрите , есть функция:
она не ждет нажатие клавиши а просто выдает текушее состояние , можно конечно запустить бескончный цыкл но тогда проц упрется в полку и прийдется делать делать задержку sleep(1) а не хотелось бы прерывать опрос клавы |
| Автор: feodorv 3.4.2015, 22:34 |
| Гм. Вы смогли не ответить на вопрос и проигнорировать предложение)))) По предложению:
termio, ncurses etc могут и содержать в себе решение, но я его не знаю или не помню... Так что за ядро? |
| Автор: box 3.4.2015, 22:48 |
| в прямом смысле ядра процессора функция вешается на ядро проца |
| Автор: feodorv 3.4.2015, 23:06 |
Аааа. Ну это не страшно, а то я о другом подумал))) Так как там связка select+stdin+timeout? |
| Автор: box 3.4.2015, 23:24 |
| тобиш вы предлагаете делать таймоут чтобы проц не упирался в полку ? тогда как будет выглядеть код? |
| Автор: feodorv 3.4.2015, 23:41 |
| Конечно:Секунда здесь - типичный таймаут. При этом select обеспечивает, с одной стороны, этот самый таймаут, с другой - проверку на нажатие клавиши. Гм. А по ссылкам сходить, man select сделать?))) |
| Автор: baldina 3.4.2015, 23:46 |
у вас однозадачная среда типа DOS? тогда делайте цикл и не беспокойтесь о загрузке процессора: ему все равно больше нечем заняться. у вас многозадачная ОС с вытеснением? тогда для вас две плохие новости и одна хорошая: - не ваша программа управляет загрузкой процессора, а ОС - процессор всегда занят, даже когда ОС показывает нулевую нагрузку. при нулевой нагрузке он занят исполнением "холостого" цикла ОС (в windows это https://ru.wikipedia.org/wiki/%D0%91%D0%B5%D0%B7%D0%B4%D0%B5%D0%B9%D1%81%D1%82%D0%B2%D0%B8%D0%B5_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B) хорошая новость в том, что вам надо не создавать цикл, а поручить ОС оповестить вас о наступлении события (блокировать поток до наступления события, передав управление ОС). в posix это select() и pool() в windows это WaitForSingleObject() и т.п. |
| Автор: box 4.4.2015, 03:19 |
| попробую покапать в сторону timeout() под ncurces для прерывания цыкла |