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

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

AntonKos

#1
Помогите плиз с назначением клавиши.Пример: Если нажать на клавишу A(код аски 41) то переменная В увеличвается на 5.Действие самой программы происходит непрерывно (While (1) { } ),то есть в любой момент вренмени мне нужно изменить значение переменной B.
 
04.09.2006
2 566
3
#2
Вы бы понятнее объясняли, может быть кто-то и помог. А пока это не вопрос, а поток сознания какой-то
 
04.09.2006
2 566
3
#3
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 
}
 
04.09.2006
2 566
3
#4
получили символ и производим с ним какие то операции, дак вот пока происходят эти операции, то надо опять же периодически вызывать getch() чтобы проверять а не изменились ли данные по ходу работы программы
Если нужно параллельно выполнять операции и продолжать опрашивать клавиатуру, то без использования потоков не обойтись.
если пока выполнялась "операция 1", была нажата кнопка, то "операция 2" выполняется с уже измененными значениями. Ну или выполнилась часть операции 1, нажата соответсвующая кнопка и остальная часть первой операции выполняется с измененными значениями.
Такого быть не может. Если клавиша была нажата во время выполнения операции 1, то сообщение от клавиатуры будет стоять в очереди. И только после того как операция 1 вернет управление, getch() выберет из очереди новый код клавиши и запустит операцию 2.
 
04.09.2006
2 566
3
#5
я не имею ввиду операцию вычитания, я подразумевал более сложную операцию, которая требует долгих вычислений.
Это ничего не меняет. Пока выполняется операция, требующих долгих вычислений, getch() вызываться не будет в Вашем коде из сообщения #5.
А точно никак не обойтись?
Вообще можно, но это отдельная тема
ЗЫ ошибся наверно, ненужны семафоры, процесс только один ведь...
Средства синхронизации потоков нужны даже в рамках одного процесса, при условии доступа из потоков к некоторому разделяемому ресурсу. Читайте Рихтера :blink:
 
A

AntonKos

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

AntonKos

#8
Ну хоть примерчик дайте.Ни у кого чтоль не было надобности в подобной вставки ассемблера по прерываниям?
 
04.09.2006
2 566
3
#9
Ни у кого чтоль не было надобности в подобной вставки ассемблера по прерываниям?
Ассемблер и прерывания здесь не при чем.
Ссылка на книгу Рихтера есть здесь: http://codeby.net/forum/threads/14324.html