Exception в потоках.

Общие вопросы программирования, алгоритмы и т.п.

Модератор: Модераторы

Ответить
dionic
новенький
Сообщения: 90
Зарегистрирован: 17.06.2009 21:00:08

Exception в потоках.

Сообщение dionic »

Всем привет народ! Подскажите кто знает, пишу многопоточное приложение в Lazarus под Linux. Так вот если в потоке возникает исключительная ситуация, то он завершается. Это можно как то отследить?
Max Rusov
постоялец
Сообщения: 191
Зарегистрирован: 25.04.2009 15:46:03

Сообщение Max Rusov »

А что должно быть?
Аватара пользователя
VirtUX
энтузиаст
Сообщения: 880
Зарегистрирован: 05.02.2008 09:52:19
Откуда: Крым, Алушта

Сообщение VirtUX »

Можно вести Лог из коротких сообщений после (перед) подозрительными участками кода, сохраняя в файл. Потом по нему отследить место сбоя.
dionic
новенький
Сообщения: 90
Зарегистрирован: 17.06.2009 21:00:08

Сообщение dionic »

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

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

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


Да такая мысль была только не в файл, а в свойство класса потомка TThread , например boolean и устанавливать его до и после участков подозрительного кода.
Max Rusov
постоялец
Сообщения: 191
Зарегистрирован: 25.04.2009 15:46:03

Сообщение Max Rusov »

Пишете в Execute try-except и в except части реализуете логику обработки исключительной ситуации, любым удобным Вам способом. Какие проблемы то?
dionic
новенький
Сообщения: 90
Зарегистрирован: 17.06.2009 21:00:08

Сообщение dionic »

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


Проблем никаких =), только Вы сами пробывали так делать? Если так пишешь то до секции Except не доходит, а просто завершается...
Max Rusov
постоялец
Сообщения: 191
Зарегистрирован: 25.04.2009 15:46:03

Сообщение Max Rusov »

Я, естественно, так пробовал. Правда под Windows. Вообще, надо признать, в FPC много недоработок с исключениями. Поведение существенно различается в зависимости от того внутреннее это исключение или системное, возникло оно в головном модуле или в библиотеке. Под Linux, возможно, свои тараканы. Если исключение не попадает в except часть - то его, конечно, не обработаешь. Для начала уточните - какого типа исключения у Вас возникают?
dionic
новенький
Сообщения: 90
Зарегистрирован: 17.06.2009 21:00:08

Сообщение dionic »

Блин раньше под виндой не получалось исключения в потоке отловить, а сейчас отловил... Ладно надо еще раз попробывать под линуксом, если всё отловится, а не завершится то всё окей будет...Спасибо Max за ответы.
Аватара пользователя
Inferno
новенький
Сообщения: 78
Зарегистрирован: 20.03.2009 13:40:20
Откуда: Тюмень

Сообщение Inferno »

ммммм....
1. если запомнить TThreadID потом в другом потоке ждать с помощью WaitForThreadTerminate и реагировать по ситуации
2. если запомнить TThreadID переодически проверять открывая поток получая хенл его, только функцию не помню.
Можно даже в основном по таймеру проверки замутить
Ответить