как реализовать в паскале прерывания?

Тема в разделе "Delphi - FAQ", создана пользователем deeeman, 20 янв 2010.

  1. deeeman

    deeeman Well-Known Member

    Регистрация:
    4 дек 2007
    Сообщения:
    382
    Симпатии:
    0
    Добрый день! Поможите плз:

    Описание к задачи:
    Необходимо написать программу, реализующую параллельную работу нескольких процессов. Каждый процесс может состоять из одного или нескольких потоков. Любой из потоков, работающих в составе этих процессов, может быть приостановлен и вновь запущен некоторой определенной клавишей (можно использовать буквенные или цифровые клавиши). Нажатия клавиш обрабатывать с помощью прерывания от клавиатуры.

    Задача:
    Два потока: первый читает информацию из файла (например, стихи или текст программы) в буфер, второй эту информацию из буфера выдаёт на экран. При заполнении окна вывода до конца его содержимое не должно обновляться полностью – вывод новой информации должен осуществляться в последнюю строку, а все остальные строки смещаться вверх. Имя читаемого файла задавать как параметр командной строки. После окончания файла он начинает считываться заново.


    потоки организованы, работает. а вот нажатие клавиш происходит через простое считывание key кнопки.
    как организовать через прерывание, я так понимаю это вставка на асеме?
     
  2. Titan

    Titan Well-Known Member

    Регистрация:
    10 июн 2004
    Сообщения:
    105
    Симпатии:
    0
    Ассемблер, дружит с перываниями, регистрами и т.д лучше всего. На нем это реализуется очень хорошо.
    Но на паскале тоже можно. Хотя не исключаю, что возможно понядобятся какие-то вставки.

    Конкретно с примерами кода на ваш ответ, не буду отвечать, это требует некоторого времени. Но вот погуглив немного, нашел парочку статей, которые должны помочь, покрвйней мере направить в какое-то русло.

    http://solidbase.karelia.ru/edu/zonna/5_pascal_10.htm

    http://amonit.sulfurzona.com/index.php?art=58 модуль: Клавиатура (собственный обработчик прерывания клавиатуры)

    надеюсь поможет...
     
  3. deeeman

    deeeman Well-Known Member

    Регистрация:
    4 дек 2007
    Сообщения:
    382
    Симпатии:
    0
    Спасибо за подборку!
    пригодился пример кода: KEYDRV.PAS
    (взято с http://amonit.sulfurzona.com/index.php?art=58)

    про клавиши вверх вниз влево вправо понятно, а вот как обстоят дела с комбинациями клавиш?
    например:
    Ctrl + z и Ctrl + x
    Shift + z и Shift + z

    где взять коды кнопок нажатых одновременно?
    можно это сделать через прерывания?

    есть код: (типа прерывания на паскале.. но хотелось бы переделать со вставками асема, вероятно быстрее будет исполнятся.. а то медленно реагирует на клавиши...)

    пока что у меня это сделано так:

    {CTR+Z - увеличиваем квант времени для производителя}
    If (ord(S)=26) Then Begin
    ........

    но хотелось бы прерываниями, может будет быстрее реагировать...
     

    Вложения:

    • KEYDRV.PAS
      Размер файла:
      6,5 КБ
      Просмотров:
      11
Загрузка...

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