Страница 1 из 1

Exception в потоках.

СообщениеДобавлено: 04.09.2009 14:42:36
dionic
Всем привет народ! Подскажите кто знает, пишу многопоточное приложение в Lazarus под Linux. Так вот если в потоке возникает исключительная ситуация, то он завершается. Это можно как то отследить?

Re: Exception в потоках.

СообщениеДобавлено: 04.09.2009 14:45:18
Max Rusov
А что должно быть?

Re: Exception в потоках.

СообщениеДобавлено: 04.09.2009 15:02:33
VirtUX
Можно вести Лог из коротких сообщений после (перед) подозрительными участками кода, сохраняя в файл. Потом по нему отследить место сбоя.

Re: Exception в потоках.

СообщениеДобавлено: 04.09.2009 15:03:38
dionic
В каком смысле что должно быть? Я просто хочу знать если поток завершился, то например запустить его вновь...Что-то типа менеджера потоков.
Есть такая библиотечка под Windows Gala написаная одним человеком, там написан класс для потоков на основе WinApi функций и там видно если поток завершился по ошибке то его завершает менеджер, ну и соответственно можно знать какие работают у тебя потоки, а какие нет.

Вот я и спрашиваю а в линуксе это как то можно реализовать?

Добавлено спустя 3 минуты 19 секунд:
VirtUX писал(а):Можно вести Лог из коротких сообщений после (перед) подозрительными участками кода, сохраняя в файл. Потом по нему отследить место сбоя.


Да такая мысль была только не в файл, а в свойство класса потомка TThread , например boolean и устанавливать его до и после участков подозрительного кода.

Re: Exception в потоках.

СообщениеДобавлено: 04.09.2009 15:13:54
Max Rusov
Пишете в Execute try-except и в except части реализуете логику обработки исключительной ситуации, любым удобным Вам способом. Какие проблемы то?

Re: Exception в потоках.

СообщениеДобавлено: 04.09.2009 15:16:59
dionic
Max Rusov писал(а):Пишете в Execute try-except и в except части реализуете логику обработки исключительной ситуации, любым удобным Вам способом. Какие проблемы то?


Проблем никаких =), только Вы сами пробывали так делать? Если так пишешь то до секции Except не доходит, а просто завершается...

Re: Exception в потоках.

СообщениеДобавлено: 04.09.2009 15:23:58
Max Rusov
Я, естественно, так пробовал. Правда под Windows. Вообще, надо признать, в FPC много недоработок с исключениями. Поведение существенно различается в зависимости от того внутреннее это исключение или системное, возникло оно в головном модуле или в библиотеке. Под Linux, возможно, свои тараканы. Если исключение не попадает в except часть - то его, конечно, не обработаешь. Для начала уточните - какого типа исключения у Вас возникают?

Re: Exception в потоках.

СообщениеДобавлено: 04.09.2009 15:31:37
dionic
Блин раньше под виндой не получалось исключения в потоке отловить, а сейчас отловил... Ладно надо еще раз попробывать под линуксом, если всё отловится, а не завершится то всё окей будет...Спасибо Max за ответы.

Re: Exception в потоках.

СообщениеДобавлено: 04.09.2009 18:16:06
Inferno
ммммм....
1. если запомнить TThreadID потом в другом потоке ждать с помощью WaitForThreadTerminate и реагировать по ситуации
2. если запомнить TThreadID переодически проверять открывая поток получая хенл его, только функцию не помню.
Можно даже в основном по таймеру проверки замутить