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

Вниз

TThread и обработка исключений   Найти похожие ветки 

 
Тимохов ©   (2004-04-15 10:47) [0]

Уважаемые мастера.

Задача: при возникновении исключения в потоке показать его в форме (добавить в Memo.lines).

Решения два.

1. Обрамить все содержимое execute в try except и в случае впозникновения ислючения не прерывать работу execute но через synchronize передать исключение главному потоку, чтобы он добавил текст исключения в memo. Достоинством является то, что поток не помирает после исключения.

2. Считать, что исключение возникшее в потоке явлется критичным (т.е. приводящим к остановке потока) и добавлять текст в memo в onTerminate потока без всяких исключений проверяя FatalException.
Недостатком является то, что поток помирает после исключения.

Вопрос, какой метод более верный?

ЗЫ Данный вопрос несет познавательные цели, поэтому предлагать в корне иной метод не стоит.


 
Romkin ©   (2004-04-15 10:50) [1]

Если не ошибаюсь, если поток создается через BeginTread, то обработка исключений уже встроена, и ничего делать не надо.


 
Romkin ©   (2004-04-15 10:51) [2]

И что значит, какой подход более верный? Как надо, так и делай. Вообще говоря, хорошим тоном является, когда исключение прерывает работу процедуры :)


 
Тимохов ©   (2004-04-15 10:53) [3]


> Romkin ©   (15.04.04 10:51) [2]

"ВЕрный" синоним "методологически верный".
На такие вопросы всегда очень позновательно Юрий Зотов отвечает - знаток корректных методик.

Что значит встроено? Все, что сделано, это то, что образуется FatalException если возникает необработанное исключение. Вроде там большие ничего нет.


 
Digitman ©   (2004-04-15 10:56) [4]

считать или не считать факт возникновения искл.ситуации в потоке критическим - решать только тебе ... для этого в except-блоке, очевидно, следует проанализировать класс и атрибуты объекта-исключения и уже на основе анализа принимать решение о возможности или невозможности дальнейшей работы потока, о необходимости (или отсутствии таковой) регистрировать искл-е с пом. того или иного механизма протоколирования ..

если таки возникла необх-ть протоколирования, то Synchronize вовсе не панацея .. можно, к примеру, воспользоваться обычным PostMessage(), подобно тому как это сделано, например, в методе TTransportThread.Execute в модуле SConnect.pas .. загляни туда и разберись в этой идее, она не самая худшая ... там, кстати, как раз и реализован анализ искл.ситуации, по результатам которой транспортный поток либо закругляется немедленно либо шлет сообщение осн.потоку и продолжает работать


 
TUser ©   (2004-04-15 10:59) [5]

Не мне вам советовать, но я думаю, что каждый из этих методов имеет свою область применения. Т.е. все определится тем, должен ли поток умереть после эксепшена. Наверное, для потоков, которые делают какие-либо расчеты предпочтительнее будет убивать их (все равно дальнейшие расчеты скорее всего окажутся непраивльными). А если этот поток что-то мониторит, то он должен выжить.


 
Тимохов ©   (2004-04-15 11:02) [6]


> Не мне вам советовать

почему? любой совет полезен.
Хоть и давно пишу в д - потоками пользовался всего несколько раз и то для некритичных задач. Опыта т.е. нет.

Digitman.
Спасибо за TTransportThread - очень позновательно.

Всем.
Главное, что я понял - тут нет правил и догм - поток должен выжить/умереть - все диктуется логикой приложения.


 
Digitman ©   (2004-04-15 11:10) [7]


> тут нет правил и догм - поток должен выжить/умереть - все
> диктуется логикой приложения.


совершенно верно


 
Romkin ©   (2004-04-15 11:13) [8]

SConnect & MConnect явно писал программист, помешанный на интерфейсах и объектах: интерфейсы порождают интерфейсы, которые обмениваются сообщениями в виде интерфейсов... Брр


 
Тимохов ©   (2004-04-15 11:15) [9]

Всем спасибо - очень позновательно.


 
Тимохов ©   (2004-04-15 11:15) [10]

Всем спасибо - очень позновательно.


 
Digitman ©   (2004-04-15 11:33) [11]


> Romkin ©   (15.04.04 11:13) [8]


может быть и помешанный, но зерно разумного в том, что он там начудил, imho, есть)

к примеру, взяв на вооружение "навязанные" мне IDataBlock, ITransport, ISendDataBlock, мне достаточно легко удалось реализовать и подцепить ко всей этой петрушке собственные классы, ощутимо расширяющие возможности обмена между сервером и клиентом ... при этом всю окаймляющую (работающую с этими интерфейсами) транспортную ботву переделывать практически не пришлось - интерфейсы же я не менял, зато функциональность интерфейсных объектов легко подогнал под свои нужды



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

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

Наверх




Память: 0.47 MB
Время: 0.034 c
1-1081937636
antoniz
2004-04-14 14:13
2004.05.02
Как сделать полупрозрачный фон (заливку)


14-1081426797
lepton77
2004-04-08 16:19
2004.05.02
А где новые дайджесты форумов?


6-1078833851
LAndreyV
2004-03-09 15:04
2004.05.02
Время запроса при скачивании HTML


1-1081862283
jiuraf
2004-04-13 17:18
2004.05.02
Удаление картинки из TImage


3-1081347600
начинаю-щий
2004-04-07 18:20
2004.05.02
Уникальное значение поля





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