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

deeeman

Well-Known Member
04.12.2007
383
0
#1
Добрый день! Поможите плз:

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

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


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

Titan

Well-Known Member
10.06.2004
105
0
#2
Ассемблер, дружит с перываниями, регистрами и т.д лучше всего. На нем это реализуется очень хорошо.
Но на паскале тоже можно. Хотя не исключаю, что возможно понядобятся какие-то вставки.

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

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

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

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

deeeman

Well-Known Member
04.12.2007
383
0
#3
Спасибо за подборку!
пригодился пример кода: 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
........

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

Вложения