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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> А можно ли использовать halt в TSR? 
V
    Опции темы
ausar
Дата 1.9.2008, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Приветствую!

У меня вот опять проблема.
Я использовал в TSR процедуру проверки параметров запуска. Процедура построена таким образом, что если введенный параметр недопустим то выполнение программы прекращается.
В принципе все работает достаточно просто. Если условие выполняется то программа выключается. Для этого я использовал оператор halt. Но по неизвестной мне причине после такого обрыва программы при повторном запуске обработчик прерываний (процедура запускающаяся при прерываниях таймера) начинает глючить.
Процедура проверки параметров запускается сразу после старта программы, затем если не происходит halt программа продолжает работу и запускается процесс обработки прерываний. Вот я и усмотрел закономерность если halt был то прога если её запустить второй раз пусть даже с верными параметрами уже нормально не работает, а если haltа не было то програ работает как надо.Т.е как я понял глюки эти както связаны с тем что я использую halt. Подскажите, что где не так? Повторюсь что до обработки прерываний дело не доходит. т.е насколько я понял дело не в том что я программа не отдает вектор прерывания обратно.
Может halt нельзя использовать в TSR вообще?  Или надо какимто образом освобождать память.Что же тогда?


PM MAIL   Вверх
ILyAHA
Дата 1.9.2008, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гламурный хакер
*


Профиль
Группа: Участник
Сообщений: 193
Регистрация: 30.3.2007
Где: Ярославская обл. г.Рыбинск

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



halt тут не причем. приведи код
--------------------
<sсriрt>alert('xss')</sсriрt>
PM MAIL   Вверх
volvo877
Дата 1.9.2008, 22:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

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



ausar, 
1) под какой ОС запускается твоя программа?
2) каким именно образом она запускается?

PM MAIL   Вверх
ausar
Дата 2.9.2008, 00:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Программа запускается из под ДОС


Это сообщение отредактировал(а) ausar - 2.9.2008, 03:52
PM MAIL   Вверх
volvo877
Дата 2.9.2008, 01:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

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



Попробуй избавиться от Halt-а, чтобы убедиться окончательно, что он тут не при чем:

Код

...
Function PrmCheck: boolean; {процедура проверки параметров запуска программы }
var
    z, x, x1:integer;
    st: string;
begin
    PrmCheck := False; { <--- False on ERROR }
    
    if (ParamCount<2) or (ParamCount>3) then begin
        writeln('Ошибка! Несоответствие параметров'); Exit;
    end;
    
    If time<1000 then begin {проверка правильности параметра "тиканье"}
        writeln('Ошибка! Введено неверное значение параметра'); Exit;
    End;
    
    z:=pos('.',ParamStr(2)); {преобразование значения параметра "звонок" в количество секунд}
    st:=copy(ParamStr(2),1,z-1);
    val(st,x,s);
    st:=copy(ParamStr(2),z+1,z+3);
    val(st,x1,s);
    if (z>0) and (x1>59) then begin 
        writeln('Ошибка! Максимальное количество секунд должно быть в диапазоне от 1 до 59'); Exit;
    end;
    
    if z=0 then x1:=x1*60;
    x:=x*60+x1;
    ringu:=x;
    if (x=0) and (x1=0) then begin 
        writeln('Ошибка! Введены недопустимые параметры для звонка "будильника"'); Exit;
    end;
    
    if length=0 then length:=10000; {проверка правильности параметра "длительность сигналов звонка"}
    if length>30000 then begin
        writeln('Ошибка! Введено неверное значение параметра "длина звонка"');
        writeln('значение должно быть в диапазоне от 1 до 30000');
        writeln('Пожалуйста перезапустите программу, указав верные параметры'); Exit;
    End;
    PrmCheck := True;
End;
    
begin
    ctime:=i;    { инициализация счетчика интервалов тикания}
    rtime:=i;    { инициализация счетчика интервалов звонка}
    cmp:=i;    { инициализация счетчика интервалов компенсации погрешности}
    ring:=false; 
    val(ParamStr(1), time,s);    { присвоение параметра тикания переменной time}
    val(ParamStr(3), length,s);    { присвоение параметра длины звонка переменной length}
    if PrmCheck then begin            {запуск проверки параметров}
        GetIntVec ($8, @OldVect);
        SetIntVec ($8, Addr (myTimer));
        Keep(0);
    end;
End.
Хотя очень странно, у тебя же при некорректных параметрах дело не доходит до смены вектора... Хм...
PM MAIL   Вверх
ausar
Дата 2.9.2008, 04:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



volvo877 - Спасибо большое за содействие!.

Код который ты привел не решил проблему. т.е проблема оказалась совсем не halt. Проблема оказалась в том, что я использовал знак равенства при сравнении интервалов с текущим показанием таймера. Т.е насколько я понял программа просто подвисала и получалось так что программа просто "прозёвывала" то время когда нужно издать звук, тоже самое было и со звонком. :(!

i- текущее значение
time1 -начальное значение
time - интервал времени

Код

If i=time1+time then begin // вот тут то и был глюк если бы я поставил > вместо= :)
sound(4000);
Delay(200);
End.


Всем спасибо вопрос решен!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

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

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

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

3. Оффтопить

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

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

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


 




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


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

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