Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.06.24;
Скачать: [xml.tar.bz2];

Вниз

Далать что-то, если N раз возникнет исключение, то raise его.   Найти похожие ветки 

 
Kolan ©   (2007-06-01 15:19) [0]

Проверьте правильно ли?
const
 TriesCount = 3;
var
 Tries: Byte;
 I: Integer;
 TempException: Exception;
begin
 for I := 1 to TriesCount do
 begin
   try
     Result := RequestDeviceOnce(Package, TimeOut);
     Package.Free;
     Exit;
   except
     on E: Exception do
       TempException := E
   end;
 end;
 Package.Free;
 raise TempException;
end;


То есть при RequestDeviceOnce тижды возникнет ошибка, то только тогда её надо выдать дальше.

Не уверен в:
TempException := E
raise TempException;


 
Kolan ©   (2007-06-01 15:25) [1]

Вот отладил имхо алгоритм верный, но вот, как я думаю, те две строки за которые я попасался дают в итоге AV


 
Anatoly Podgoretsky ©   (2007-06-01 15:25) [2]

> Kolan  (01.06.2007 15:19:00)  [0]

Нормально


 
Kolan ©   (2007-06-01 15:30) [3]

> Нормально

Что-то нетак.

Добавил лог:
except
     on E: Exception do
     begin
       //
       LogManager.WriteString("Ошибка при приёме/передачи пакета" + ": " + E.Message);
       //
       TempException := E;
     end;
   end;

Вот он

16616 15:23:22:144 Ошибка при приёме передачи пакета: Время ожидания вышло. //Раз ошибка
16617 15:23:22:144 Записано в COM порт:
16618 15:23:23:941 Ошибка при приёме передачи пакета: Время ожидания вышло. //Два ошибка
16619 15:23:23:941 Записано в COM порт:
16620 15:23:25:738 Ошибка при приёме передачи пакета: Время ожидания вышло. //Три ошибка


А в итоге вижу Access Violation — странно&#133


 
Kolan ©   (2007-06-01 15:31) [4]

> А в итоге вижу Access Violation — странно…

Вот то что вижу:
{Общая информационная команда для пользователя. Cтрока: «Access violation at address 00404A24 in module "KAcousticPressureConverter.exe". Read of address 00000000». | TCustomUserMessageCommand}.


 
b z   (2007-06-01 15:35) [5]

както так
const
TriesCount = 3;
var
Tries: Byte;
I: Integer;
begin
Result := 1;
for I := 1 to TriesCount do
  try
    Result := RequestDeviceOnce(Package, TimeOut);
    FreeAndNil(Package);
  except
    on E: Exception do
      if (i = TriesCount) then begin
          FreeAndNil(Package);
          raise;
      end;
  end;
end;


 
b z   (2007-06-01 15:36) [6]

Result := 1; - это для наглядности


 
Kolan ©   (2007-06-01 15:39) [7]

> if (i = TriesCount) then begin

Такая идея и возникла, а нах мне тогда цикл до TriesCount&#133 Выглядит как-то страно, имхо&#133


 
b z   (2007-06-01 15:42) [8]

а по мне
    Exit;
  except
    on E: Exception do
      TempException := E
  end;
end;
Package.Free;
raise TempException;
страннее намного :)


 
Kolan ©   (2007-06-01 15:46) [9]

> а по мне
>    Exit;

Ну Exit, то все равно нужен. Сделал как вы предложили — вроде работает, но на понятно почему не работал сабж. Хотелось бы понять&#133


 
b z   (2007-06-01 15:56) [10]


> Kolan ©   (01.06.07 15:46) [9]

имелось ввиду не только Exit;, но и все остальное
да и в моей версии его (Exit;) нет
но только вы знаете все ньюансы

> Хотелось бы понять…

т.к. объект уже разрушен. тут надо "клонировать" если оставлять ваш вариант, или еще как ...
:)


 
Kolan ©   (2007-06-01 15:58) [11]

> т.к. объект уже разрушен.

А можно подробнее, почему и где оно(исключение) разрушилось?


 
Leonid Troyanovsky ©   (2007-06-01 16:40) [12]


> Kolan ©   (01.06.07 15:58) [11]

> А можно подробнее, почему и где оно(исключение) разрушилось?

Что такое, товарищи, "идея", и что такое, братья, "дебют".

Твой хелп затерся до дыр?

The exception object is then automatically destroyed through a call to its Destroy destructor and control is passed to the statement following the try...except statement. (If a call to the Exit, Break, or Continue standard procedure causes control to leave the exception handler, the exception object
is still automatically destroyed.)

Во-ще-то, IMHO, топик и приведенный в [0] код коррелируют слабо.

--
Regards, LVT.


 
Kolan ©   (2007-06-01 16:43) [13]

> Твой хелп затерся до дыр?

:-[


> Во-ще-то, IMHO, топик и приведенный в [0] код коррелируют
> слабо.

Тут старался как мог, лучьше названия не придумал&#133

Благодарю, я разобрался.


 
Anatoly Podgoretsky ©   (2007-06-01 18:32) [14]

Никакого
16617 15:23:22:144 Записано в COM порт:
В коде не наблюдается, зато наблюдается глобальная переменная Package
Кол естественно можно улучшить, например Package.Free вынести в finally end, а raise TempException; в except end с анализом на I = 3


 
b z   (2007-06-01 19:35) [15]


> Kolan ©   (01.06.07 15:58) [11]

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

> Anatoly Podgoretsky ©   (01.06.07 18:32) [14]
> глобальная переменная Package

или пришла параметром, да и ваще странный код :)


 
Kolan ©   (2007-06-02 09:03) [16]

> или пришла параметром

Угу


> наблюдается глобальная переменная

Я такими вещами не занимаюсь :)


> да и ваще странный код :)

Почему? Просто все лишенне убрал&#133

Ладно вопрос закрыт. Благодарю за обсуждение.


 
Anatoly Podgoretsky ©   (2007-06-02 10:59) [17]

> наблюдается глобальная переменная

> Я такими вещами не занимаюсь :)

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

> Почему? Просто все лишенне убрал…

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


 
Loginov Dmitry ©   (2007-06-02 12:00) [18]

> raise TempException;


а разве объект исключения не разрушился сразу после окончания except...end ?



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2007.06.24;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.037 c
2-1180506057
AlexGalkin
2007-05-30 10:20
2007.06.24
Копирование содержимого папки


8-1159181255
guitarist
2006-09-25 14:47
2007.06.24
Клетчатое поле


15-1179892477
db2admin
2007-05-23 07:54
2007.06.24
RiData


4-1168258490
BOB16
2007-01-08 15:14
2007.06.24
как получить информацию о HFONT-шрифте и поменять его


1-1177485787
Dioman
2007-04-25 11:23
2007.06.24
смена сочетаний клавиш в delphi





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский