Назначение клавише

  • Автор темы AntonKos
  • Дата начала
A

AntonKos

Помогите плиз с назначением клавиши.Пример: Если нажать на клавишу A(код аски 41) то переменная В увеличвается на 5.Действие самой программы происходит непрерывно (While (1) { } ),то есть в любой момент вренмени мне нужно изменить значение переменной B.
 
E

European

Вы бы понятнее объясняли, может быть кто-то и помог. А пока это не вопрос, а поток сознания какой-то
 
E

European

rrrFer, тогда возникает вопрос, для чего нужно такое увеличение, почему ожидание (цикл) безусловное и т.д.

AntonKos, получить код нажатой клавиши можно при помощи getch.

Вот пример из MSDN:
Код:
// This program reads characters from
// the keyboard until it receives a 'Y' or 'y'.


#include <conio.h>
#include <ctype.h>

int main( void )
{
int ch;

_cputs( "Type 'Y' when finished typing keys: " );
do
{
ch = _getch();
ch = toupper( ch );
} while( ch != 'Y' );

_putch( ch );
_putch( '\r' );	// Carriage return
_putch( '\n' );	// Line feed 
}
 
E

European

получили символ и производим с ним какие то операции, дак вот пока происходят эти операции, то надо опять же периодически вызывать getch() чтобы проверять а не изменились ли данные по ходу работы программы
Если нужно параллельно выполнять операции и продолжать опрашивать клавиатуру, то без использования потоков не обойтись.
если пока выполнялась "операция 1", была нажата кнопка, то "операция 2" выполняется с уже измененными значениями. Ну или выполнилась часть операции 1, нажата соответсвующая кнопка и остальная часть первой операции выполняется с измененными значениями.
Такого быть не может. Если клавиша была нажата во время выполнения операции 1, то сообщение от клавиатуры будет стоять в очереди. И только после того как операция 1 вернет управление, getch() выберет из очереди новый код клавиши и запустит операцию 2.
 
E

European

я не имею ввиду операцию вычитания, я подразумевал более сложную операцию, которая требует долгих вычислений.
Это ничего не меняет. Пока выполняется операция, требующих долгих вычислений, getch() вызываться не будет в Вашем коде из сообщения #5.
А точно никак не обойтись?
Вообще можно, но это отдельная тема
ЗЫ ошибся наверно, ненужны семафоры, процесс только один ведь...
Средства синхронизации потоков нужны даже в рамках одного процесса, при условии доступа из потоков к некоторому разделяемому ресурсу. Читайте Рихтера :blink:
 
A

AntonKos

при getche() будет остановка программы(цикла).А как работать с потоками?
 
A

AntonKos

Ну хоть примерчик дайте.Ни у кого чтоль не было надобности в подобной вставки ассемблера по прерываниям?
 
E

European

Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!