![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вопрос по Exception в TThread-е
alles © (2007-08-16 11:41:00)Добрый день.
Есть один поток который запускается из основного потока. В нем идет какая-та проверка и если она не выполняется, поток генерирует Exception. Примерно так:
if not Assigned(NetShareEnumNT)
raise Exception.Create('NetShareEnumNT not assigned');
как правильно передать этот Exception основному потоку и там показать окошку с Exception и завершить этот поток?
Спасибо
alles (2007-08-16 13:07:00) [1]Спасибо всем, иду читать :)
Leonid Troyanovsky (2007-08-16 12:27:00) [2]
> alles © (16.08.07 11:41)
> как правильно передать этот Exception основному потоку и
> там показать окошку с Exception и завершить этот поток?
http://dn.codegear.com/article/10452
--
Regards, LVT.
Сергей М. (2007-08-16 12:14:00) [3]Но лучше всего недопускать ситуаций с необработанными исключениями в потоке, оборачивая тело метода Execute в блок try..except
Сергей М. (2007-08-16 12:12:00) [4]оч просто.
Для этого класс TThread предоставляет публичный метод FatalException.
Им можно воспользоваться, например, так:
Основной поток после создания доолнительного потока в suspended-режиме устанавливает обработчик OnTerminate, в котором анализируется состояние этого св-ва. Если оно не равно nil, то в ходе работы доп.потока было зафиксировано необработанное тобой исключение, которое можно проанализировать (но не позднее вызова деструктора доп.потока) и при необходимости перевозбудить его вызовом raise FatalException