Я ищу способ ... продолжать приращение без того, чтобы пользователь удерживал эту клавишу ".
ИМХО, стоит учесть функцию "select ()" (если она есть в вашей ОС)
Давно я использовал "select ()" в vxWorks. Я вижу из справочной страницы, что эта функция также доступна для Ubuntu Linux. (может быть, это доступно для вашей системы?)
С помощью оператора select поток или программа могут «отслеживать несколько файловых дескрипторов, ожидая, пока один или несколько файловых дескрипторов не станут« готовы »к некоторому классу операций ввода-вывода (например, возможен ввод). Файловый дескриптор считается готовым, если можно выполнить соответствующую операцию (например, read () без блокировки или достаточно маленькую write ()) ». (со страницы руководства)
На практике система, над которой я работал, имела поток пользовательского интерфейса (один из нескольких), который считывал и отслеживал входной fd (через select) для пользовательского ввода. Наш выбор использовал тайм-аут 1/2 секунды (вы выбираете ставку). Таким образом, каждые полсекунды, если пользовательский ввод не происходил на этом порту (то есть на устройстве), тайм-аут освобождает программу для проверки битов в fd_sets.
Ничто не мешает коду выполнять дополнительные действия в течение тайм-аута.
Я предполагаю, что вам нужно будет работать только с readfds, а остальные fds можно оставить пустыми.
Другими словами, с помощью select ваш код «отслеживает» некоторый ввод пользователя с тайм-аутом и выполняет действия либо при вводе пользователем (нажатие клавиши), либо из-за тайм-аута.
Это похоже на то, что вы ищете - действие без нажатия клавиши.
person
2785528
schedule
08.01.2017
if(kbhit())
, может быть, я могу расширить свой ответ - person tinkertime   schedule 08.01.2017