Привет! Да ви върна малко към професионални въпроси :)
Може да сте разглеждали вече подобен проблем, аз минавам доста рядко и със сигурност съм го пропуснал. Така че ако има подобна тема, само ме насочете към нея.
Аз пиша основно под Виндовс. Сега ми се наложио спешно да префасонирам и подкарам един гигантски проект под Линукс, Ubuntu. Всичко си е ок, с изключение на следното.
Програмата обработва екстрените ситуации по стандартен начин. Навсякъде където трябва има капанчета от рода на
try {
......
}
catch (exception1&...
catch (exception2&...
catch(...) {...}
Под Виндовс всичко си е перфектно. Под Линукс обаче има и сигнали, които не се ловят от тези капани, например SIGBUS и подобни. Проблемът е как да прекарам и такива сигнали (избран набор, не всички) да се насочат да се ловят от някой catch по-горе, за да може всичко да си мине по реда - да се извикат съответните деструктори на обекти и да се освободят нужните ресурси доколкото може и да се вземе нужното решение какво да се прави. Идеята е това да стане с минимални доработки на горният механизъм, а не цялостната му замяна. Целта е приложението да работи 24/7, като в краен случай да се саморестартира интелигентно. Нужно е това да работи коректно и в многонишков контекст.
В общият случай капаните от горният тип са вложени един в друг, тоест в тялото на try{} някъде навътре има подобна конструкция, ловяща същото или подобно.
Аз не съм на ти със сигналите, затова и питам. Ако някой е правил нещо подобно, ще се радвам ако го сподели. Ако някой има други идеи по въпроса, пак няма да остана безрадостен
Успехи!
За разлика от главата, стомахът се усеща когато е празен...
|