Суть такая:
приложение - это движок, которое загружает модули (объекты C++ классов с определённым интерфейсом), связывает их друг с другом и в бесконечном цикле блокируется на мьютексе (два раза вызывает функцию pthread_mutex_lock) - просто чтобы спать, не жрать ресурсы: вся работа происходит в модулях.
Модули могут быть многопоточными, по-крайней мере один из них точно запускает отдельный поток, иначе программа вообще ничего делать не будет.
Модули могут выбрасывать C++ исключения. В т.ч. и в тех своих "отдельных" потоках.
Встаёт вопрос: есть-ли какой-то красивый способ, чтобы:
1. Обработать эти исключения (в самом простом случае - вывести в std::cerr сообщение).
2. Вернуть всю систему в рабочее состояние, т.е. вернуть все потоки в исходное состояние: основной - спит, остальные - работают.
?
Или это фантастика и нужно задуманную структуру переделывать?
P.S. Вот это: http://www.ibm.com/developerworks/linux/li...cep.html#N100C9 читал.
Исключения в многопоточном приложении. (Нужны идеи.)
Модератор: Модераторы разделов
-
whirlwind
- Сообщения: 67
Re: Исключения в многопоточном приложении.
вот эта фраза вызвала подсознательное невосприятие
зачем лишние проблемы? просто бесконечный цикл и все, не отъест он особенно никаких ресурсов. А проблем будет меньше
зачем лишние проблемы? просто бесконечный цикл и все, не отъест он особенно никаких ресурсов. А проблем будет меньше
Добро всегда побеждает зло. Мы победили, значит мы - добро.
-
Zeus
- Сообщения: 694
Re: Исключения в многопоточном приложении.
-
Upliner
- Сообщения: 67
- ОС: openSUSE 11 / Debian Lenny
Re: Исключения в многопоточном приложении.
А какие проблемы? Нужно просто в каждой потоковой функции ловить эти исключения. Если модули создают потоки самостоятельно, писателям модулей нужно просто запретить использовать низкоуровневые функции вроде pthread_create и предоставить в движке свои функции для работы с потоками, в которых каждый поток будет запускаться в "обёртке" обработчика исключений.Встаёт вопрос: есть-ли какой-то красивый способ, чтобы:
1. Обработать эти исключения (в самом простом случае - вывести в std::cerr сообщение).
От Кузбаса и до Затулинки, от вершин до глубиннейших руд
Анархисты Сибирской Республики нас к предельной свободе ведут
Анархисты Сибирской Республики нас к предельной свободе ведут
-
Zeus
- Сообщения: 694
Re: Исключения в многопоточном приложении.
Хм... а это мысль!
Спасибо
Спасибо