Модераторы: volvo877, Snowy, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> организация потока на turbo pascal 
:(
    Опции темы
СЭНСЭЙ
Дата 2.10.2009, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 432
Регистрация: 20.3.2006

Репутация: нет
Всего: нет



Подскажите как в турбо паскале организовать следующее:
есть цикл в котором обрабатываются данные. Нужно сделать так что бы по нажатию клавиши в цикле менялись значение каких нибудь переменных.

PM MAIL   Вверх
CodingMonster
Дата 2.10.2009, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 10.9.2009

Репутация: нет
Всего: нет



Проверяя KeyPressed и используя ReadKey?

Это сообщение отредактировал(а) CodingMonster - 2.10.2009, 15:03
PM MAIL   Вверх
Alexeis
Дата 2.10.2009, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: нет
Всего: 459



  На определенных участках вставлять вызов функции проверяющей состояния клавиш.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
СЭНСЭЙ
Дата 2.10.2009, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 432
Регистрация: 20.3.2006

Репутация: нет
Всего: нет



можете пример привести проверки состояния клавишь?

Добавлено через 1 минуту и 37 секунд
КодинМонстр: я знаю как использовать эти процедуры только останавливая программу и в замкнутом бесконечном цикле ожидать нажатия клавиши. А нужно что бы работа основного цикла не прерывалась.
PM MAIL   Вверх
Alexeis
Дата 2.10.2009, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: нет
Всего: 459



Цитата(СЭНСЭЙ @  2.10.2009,  14:59 Найти цитируемый пост)
я знаю как использовать эти процедуры только останавливая программу и в замкнутом бесконечном цикле ожидать нажатия клавиши. 

  Вот тоже самое, только в этом цикле помимо проверки нужно производить основную работу. Прошел определенный этап, проверил кнопку, прошел второй этап снова проверил. Желательно чтобы проверка вызывалась не реже 10 раз в секунду.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
СЭНСЭЙ
Дата 2.10.2009, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 432
Регистрация: 20.3.2006

Репутация: нет
Всего: нет



я сделала так:
Код

i:=1;
j:=1;
repeat
begin
writeln(i);
if keypressed then ch:=readkey;
if ch='N' then begin i:=i+1; ch:='a'; end;
delay(1000);
j:=j+1;
end until j>=1000


это работает но может есть получше варианты? чем то этот меня смущает...
и как сканировать не введенный символ а клавишу и/или сочетание клавишь
PM MAIL   Вверх
Alexeis
Дата 2.10.2009, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: нет
Всего: 459



  Раз в секунду это редко, я бы
Код

if keypressed then ch:=readkey;
if ch='N' then begin i:=i+1; ch:='a'; end;

Вывел в отдельную функцию, например testkey, тогда можно было аналогичный код написать как

Код

i:=1;
j:=1;
repeat
begin
writeln(i);
  testkey(i);
 delay(100);
  testkey(i);
 delay(100);
  testkey(i);
 delay(100);
  testkey(i);
 delay(100);
  testkey(i);
 delay(100);
  testkey(i);
 delay(100);
  testkey(i);
 delay(100);
  testkey(i);
 delay(100);
  testkey(i);
 delay(100);
  testkey(i);
 delay(100);
j:=j+1;
end until j>=1000


В том смысле что имеются неповторяющися куски кода, которые выполняются по 100мс. Если куски повторяются в цикле, то testkey(i); вызывать внутри длительного цикла.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
СЭНСЭЙ
Дата 2.10.2009, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 432
Регистрация: 20.3.2006

Репутация: нет
Всего: нет



понял!
и это нормальное решение если я хочу к примеру сделать игру 2д типа марио или реалтайм стратегии в текстовом режиме?
PM MAIL   Вверх
Alexeis
Дата 2.10.2009, 20:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: нет
Всего: 459



Цитата(СЭНСЭЙ @  2.10.2009,  18:44 Найти цитируемый пост)
и это нормальное решение если я хочу к примеру сделать игру 2д типа марио или реалтайм стратегии в текстовом режиме? 

  Для марио запросто, там нечего особенно рисовать. Основное время будет затрачиваться на простой ожидания нажатия. Придется еще искусственно задержку вводить чтобы проц попросту не грузить слишком частыми проверками нажатия.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
СЭНСЭЙ
Дата 2.10.2009, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 432
Регистрация: 20.3.2006

Репутация: нет
Всего: нет



А комбинацию клавишь как проверять?
PM MAIL   Вверх
Virtuals
Дата 6.10.2009, 06:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 476
Регистрация: 27.11.2006

Репутация: нет
Всего: 11



СЭНСЭЙ, найди библиотеки турбопрофешнл ;)

вот дэмка
Код

uses tpcrt,tpstring;
 var Tm:word;
     Tb1,tb2,tbX:LongInt;
var
  BIOSTimer : LongInt absolute $40:$6c; тики биоса ~17раз в сек.

 begin
tbX:=0;
  repeat
tbX:=tbx+1;
   tb1:=BiosTimer;
if ABS((tb1- tb2) div 17) >2 then примерно 1раз в 2сек выводим на экран.
  begin
  tb2:=tb1;
   FastWrite(Form('##########',tb1),1,1,$12);
   FastWrite(Form('##########',tbx),2,2,$12);
tbX:=0;
  end;

  until keypressed;
  tm:=readkeyword;
  writeln('$',HexW(tm),'    ');расширенный скан с клавы
 end.
 smile 

хотя если не нужны все прелести библиотек то

Код

var QX:word;
procedure readkeyword;
label L1;
begin
asm
L1:int    $28
mov    ah,01
int    $16
je     L1
mov    ah,00
int    $16
mov Qx,AX
end;
end;

 begin
  readkeyword;
  writeln(qx);
 end.

старший байт скан код, младший код кнопки.

Это сообщение отредактировал(а) Virtuals - 6.10.2009, 07:18
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема »


 




[ Время генерации скрипта: 0.1146 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.