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

Тема в разделе "Общие вопросы по С и С++", создана пользователем AntonKos, 20 янв 2009.

  1. AntonKos

    AntonKos Гость

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

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    Вы бы понятнее объясняли, может быть кто-то и помог. А пока это не вопрос, а поток сознания какой-то
     
  3. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    rrrFer, тогда возникает вопрос, для чего нужно такое увеличение, почему ожидание (цикл) безусловное и т.д.

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

    Вот пример из MSDN:
    Код (Text):
    // 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
    }
     
  4. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    Если нужно параллельно выполнять операции и продолжать опрашивать клавиатуру, то без использования потоков не обойтись.
    Такого быть не может. Если клавиша была нажата во время выполнения операции 1, то сообщение от клавиатуры будет стоять в очереди. И только после того как операция 1 вернет управление, getch() выберет из очереди новый код клавиши и запустит операцию 2.
     
  5. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    Это ничего не меняет. Пока выполняется операция, требующих долгих вычислений, getch() вызываться не будет в Вашем коде из сообщения #5.
    Вообще можно, но это отдельная тема
    Средства синхронизации потоков нужны даже в рамках одного процесса, при условии доступа из потоков к некоторому разделяемому ресурсу. Читайте Рихтера :blink:
     
  6. AntonKos

    AntonKos Гость

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

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
     
  8. AntonKos

    AntonKos Гость

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

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    Ассемблер и прерывания здесь не при чем.
    Ссылка на книгу Рихтера есть здесь: http://codeby.net/forum/threads/14324.html
     
Загрузка...

Поделиться этой страницей