1. Набираем команду codeby webinar. Набираем команду для организации и проведения вебинаров. Подробнее ...

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление
  3. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление

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

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

  1. deeeman

    deeeman Well-Known Member

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

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

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


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

    Titan Well-Known Member

    Репутация:
    0
    Регистрация:
    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

    Репутация:
    0
    Регистрация:
    4 дек 2007
    Сообщения:
    383
    Симпатии:
    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
Загрузка...

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