Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.02.25;
Скачать: CL | DM;

Вниз

Иключения в потоке. Как правильно обрабатывать?   Найти похожие ветки 

 
Kolan ©   (2007-01-04 13:02) [0]

Есть доп поток. Вот его метод Execute.

procedure TMeasurmentPerformer.Execute;
begin
 inherited;
 FreeOnTerminate := True;
 while not Terminated do
 begin
     FMeasurmentStrategy.StartMeasurment(FMeasurmentRange, FMeasurment);
 end;
end;

В StartMeasurment может возникнуть исключение. Как его обработать?

Я пробовал так:

procedure TMeasurmentPerformer.Execute;
begin
 inherited;
 FreeOnTerminate := True;
 while not Terminated do
 begin
   try
     FMeasurmentStrategy.StartMeasurment(FMeasurmentRange, FMeasurment);
   except
     on E: Exception do
     begin
       FException := E;
       Synchronize(HandleException);
     end;
   end;
   Suspend;
 end;
end;


procedure TMeasurmentPerformer.HandleException;
begin
 raise FException;
end;


Но че-то неправильно. Сообщение об ошибке не появляется. А при повторном запуске получаю Thread error (6).


 
tesseract ©   (2007-01-04 13:17) [1]


> А при повторном запуске получаю Thread error (6).


Поток может всё ещё работает?

И Sleep(1) в цикл добавь.


 
Kolan ©   (2007-01-04 13:20) [2]

> Поток может всё ещё работает?
>

Хотелось бы понять почему я не получаю сообщение об ошибке если она возникает.
- Наверно я неправильно её обработываю.


> И Sleep(1) в цикл добавь.

Зачем?


 
tesseract ©   (2007-01-04 13:50) [3]


> > И Sleep(1) в цикл добавь.Зачем?


Чтобы процессор на 100% не грузить. Проверь пошаговым отладчиком, может у тебя исключение не обрабатываеться.


 
Kolan ©   (2007-01-04 14:13) [4]

> begin
> raise FException;
> end;

Сюда я попадаю. А дальше в отладчике вообше туча ошибок.А без него тишина - никаких сообщений.


 
Eraser ©   (2007-01-04 14:18) [5]

а зачем вызывать исключение в основном потоке, если оно произошло в главном?


 
Eraser ©   (2007-01-04 14:18) [6]

> в главном?

т.е. в дополнительном.


 
oxffff ©   (2007-01-04 14:27) [7]

А Suspend у тебя должен в цикле стоять?


 
MetalFan_pda   (2007-01-04 15:30) [8]

помоему нельзя так экзешны передавать...


 
Джо ©   (2007-01-04 16:47) [9]

> В StartMeasurment может возникнуть исключение. Как его обработать?

Занести в лог. Если нужно, проинформировать основной поток. Завершить работу потока. :)


 
Kolan ©   (2007-01-04 19:48) [10]

«а зачем вызывать исключение в основном потоке, если оно
произошло в главном?»

Пользователю чтобы сообщение выдать&#133

«Занести в лог. Если нужно, проинформировать основной поток.
Завершить работу потока. »

Угу понял&#133


 
Eraser ©   (2007-01-04 22:01) [11]

> [10] Kolan ©   (04.01.07 19:48)
> «а зачем вызывать исключение в основном потоке, если оно
>
> произошло в главном?»
>
> Пользователю чтобы сообщение выдать…

а какой смысл в этой конструкци?

> procedure TMeasurmentPerformer.HandleException;
> begin
> raise FException;
> end;

с таким же успехом можно показать стандартный мессадж-бокс.


 
Kolan ©   (2007-01-04 23:50) [12]

«
с таким же успехом можно показать стандартный мессадж-бокс.»


Лана завтра попробую.


 
oxffff ©   (2007-01-06 13:54) [13]

>Но че-то неправильно. Сообщение об ошибке не появляется.

TApplication.Idle вызывает CheckSynchronize, а в нем
          try
             SyncProc.SyncRec.FMethod;
           except
             SyncProc.SyncRec.FSynchronizeException := AcquireExceptionObject;
           end;


 
Kolan ©   (2007-01-06 19:03) [14]

Совета «[11]» мне хватило, благодарю.



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

Текущий архив: 2007.02.25;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.039 c
15-1170415685
ТуцГыук
2007-02-02 14:28
2007.02.25
Linux


2-1171020287
zxcv
2007-02-09 14:24
2007.02.25
как дату из DateTimePicker поместить в строковую переменную?


2-1170786552
Михаил_
2007-02-06 21:29
2007.02.25
TDBF


15-1170506369
Trible
2007-02-03 15:39
2007.02.25
тематические картинки


1-1168108827
Sleepeer
2007-01-06 21:40
2007.02.25
Работа с MD и ERT файлами 1Сv77 напрямую - без плагинов в дельфи





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский