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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> прерывание getch() 
:(
    Опции темы
box
Дата 3.4.2015, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 506
Регистрация: 27.2.2007

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



всем привет!
кто нибудь знает можно ли как сделать прерывание опроса клавы раз в секунду и вызвать подпрограмму тобиш надо что бы функция getch() вызывала подпрограмму раз в секунду
а то она морозит выполнение всего ядра пока не нажмеш кнопку 
PM MAIL   Вверх
feodorv
Дата 3.4.2015, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

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



Цитата(box @  3.4.2015,  20:20 Найти цитируемый пост)
всего ядра

Простите, ядра чего?

Я бы использовал select на STDIN.


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
box
Дата 3.4.2015, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 506
Регистрация: 27.2.2007

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



смотрите , есть функция:
Код


int _kbhit() {
    static bool inited = false;
    int left;

    if (!inited) {
        termios t;
        tcgetattr(0, &t);
        t.c_lflag &= ~ICANON;
        tcsetattr(0, TCSANOW, &t);
        setbuf(stdin, NULL);
        inited = true;
    }

    ioctl(0, FIONREAD, &left);

    return left;
}


она не ждет нажатие клавиши а просто выдает текушее состояние , можно конечно запустить бескончный цыкл но тогда проц упрется в полку и прийдется делать делать задержку sleep(1) а не хотелось бы прерывать опрос клавы 
PM MAIL   Вверх
feodorv
Дата 3.4.2015, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

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



Гм. Вы смогли не ответить на вопрос и проигнорировать предложение))))

По предложению:Увы, подводных камней в этом решении проблемы я не помню, но, по-моему, нужно установить стдину посимвольную моду и не забывать вызывать fflush.

termio, ncurses etc могут и содержать в себе решение, но я его не знаю или не помню...

Так что за ядро?



--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
box
Дата 3.4.2015, 22:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 506
Регистрация: 27.2.2007

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



в прямом смысле ядра процессора функция вешается на ядро проца
PM MAIL   Вверх
feodorv
Дата 3.4.2015, 23:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

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



Цитата(box @  3.4.2015,  22:48 Найти цитируемый пост)
в прямом смысле ядра процессора

Аааа. Ну это не страшно, а то я о другом подумал)))
Так как там связка select+stdin+timeout?


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
box
Дата 3.4.2015, 23:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 506
Регистрация: 27.2.2007

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



тобиш вы предлагаете делать таймоут чтобы проц не упирался в полку ? тогда как будет выглядеть код?
PM MAIL   Вверх
feodorv
Дата 3.4.2015, 23:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

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



Цитата(box @  3.4.2015,  23:24 Найти цитируемый пост)
тобиш вы предлагаете делать таймоут чтобы проц не упирался в полку ?
Конечно:
Цитата(box @  3.4.2015,  20:20 Найти цитируемый пост)
как сделать прерывание опроса клавы раз в секунду
Секунда здесь - типичный таймаут. При этом select обеспечивает, с одной стороны, этот самый таймаут, с другой - проверку на нажатие клавиши.


Цитата(box @  3.4.2015,  23:24 Найти цитируемый пост)
тогда как будет выглядеть код? 

Гм. А по ссылкам сходить, man select сделать?)))


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
baldina
Дата 3.4.2015, 23:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 32
Всего: 101



Цитата(box @  3.4.2015,  22:48 Найти цитируемый пост)
в прямом смысле ядра процессора функция вешается на ядро проца 

у вас однозадачная среда типа DOS? тогда делайте цикл и не беспокойтесь о загрузке процессора: ему все равно больше нечем заняться.
у вас многозадачная ОС с вытеснением? тогда для вас две плохие новости и одна хорошая:
- не ваша программа управляет загрузкой процессора, а ОС
- процессор всегда занят, даже когда ОС показывает нулевую нагрузку. при нулевой нагрузке он занят исполнением "холостого" цикла ОС (в windows это System Idle Process)

хорошая новость в том, что вам надо не создавать цикл, а поручить ОС оповестить вас о наступлении события (блокировать поток до наступления события, передав управление ОС).
в posix это select() и pool()
в windows это WaitForSingleObject() и т.п.

PM MAIL   Вверх
box
Дата 4.4.2015, 03:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 506
Регистрация: 27.2.2007

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



попробую покапать в сторону timeout() под ncurces для прерывания цыкла
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.0804 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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