Ответы пользователя по тегу Qt
  • Как спроектировать архитектуру?

    @menkar3
    По формулировке вопроса - можно посмотреть паттерн медиатор. Каждый объект будет напрямую работать только с объектом-посредником, у которого уже есть ссылки на все объекты и который организует общение.
    Если смотреть на решение вообще - "куча классов, которым всем почему-то друг про друга нужно знать" - звучит как не очень удачная архитектура, имхо.
    Ответ написан
  • Поможет ли вынос работы с крэшащейся библиотекой в отдельный поток от крэша всего приложения?

    @menkar3
    Вкратце - скорее всего нет. Кроссплатформенно - еще более сомнительно.
    Как именно крашится либа? Я так понял, это не вылетевшее C++ исключение, а что-то вроде коррапта памяти (хотя в самой либе может быть гадость вроде if(fail){exit(-1);}, с чем уже работать проблематично). В теории, можно для каждой платформы это обработать. Если сходу - как это можно реализовать для винды:
    На самом деле выносим работу с либой в отдельный поток. Когда она сделает что-то плохое (к примеру, попытается читать освобожденную память) будет выброшено SEH исключение, для которого мы можем зарегистрировать обработчик (using a vectored exception handler в msdn). В хендлере можно было бы проверить, что исключение выброшено именно из треда этой либы и если это действительно так - просто грохнуть этот тред. Но даже если сработает это крайне плохой метод - либа захватывает какие-то ресурсы и нет никакой гарантии, что она корректно их освободит при падении треда (да и что приложение вообще останется в согласованном состоянии - кто знает, почему она падает - может, там вообще половина памяти перед этим мусором перезаписывается). Короче, решение с потоком - это потенциально нестабильная работа всего приложения.
    Для изоляции памяти и использования ресурсов как раз и существуют процессы, как бы не хотелось от них уйти :)
    Так что решение с отдельным процессом, который будет изолировать все болячки либы и не давать им распространиться на все приложение таки самое безопасное.
    Ответ написан
    1 комментарий