eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingAda Tutorial - w Instytucie Lotnictwa › Re: Ada Tutorial - w Instytucie Lotnictwa
  • Data: 2019-05-07 21:38:29
    Temat: Re: Ada Tutorial - w Instytucie Lotnictwa
    Od: Szyk Cech <s...@s...pl> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    > Zadanie dla chętnych: w ilu miejscach może tu polecieć wyjątek?

    Kogo to obchodzi? Moje (proste i sprawdzone w praktyce w programowaniu w
    C++ z Qt od 10 lat) zasady obsługi wyjątków są takie:

    1. Każda klasa wyjątku dziedziczy po std::exception (tego przestrzegają
    też klasy wyjątków Qt),

    2. Obstawiamy funkcję main czymś takim:

    #define MAIN_CONSOLE_CATCH \
    catch(Exception& aEx) \
    { \
    QTextStream lErr(stderr); \
    lErr << QObject::tr("Exception occurs! Sender: %1, Error code:
    %2\nMessage:\n%3").arg(aEx.senderName()).arg(aEx.err
    orCode()).arg(aEx.what()).toUtf8()
    << endl << flush; \
    return EXIT_FAILURE; \
    } \
    catch(std::exception& aEx) \
    { \
    QTextStream lErr(stderr); \
    lErr << QObject::tr("Exception
    occurs!\nMessage:\n%1").arg(aEx.what()).toUtf8() << endl << flush; \
    return EXIT_FAILURE; \
    } \
    catch(...) \
    { \
    QTextStream lErr(stderr); \
    lErr << QObject::tr("Unknown exception occurs!") << endl <<
    flush; \
    return EXIT_FAILURE; \
    }


    3. Obstawiamy wszystkie funkcje obsługi zdarzeń
    4. Obstawiamy wszystkie funkcje wątków, obie czymś takim:

    #define STANDARD_CATCH \
    catch(Exception& aEx) \
    { \
    gCritical(QObject::tr("Exception occurs!\n%1").arg(aEx.what()),
    aEx.senderName(), static_cast<quint64>(aEx.errorCode())); \
    } \
    catch(std::exception& aEx) \
    { \
    gCritical(QObject::tr("Exception occurs!\n%1").arg(aEx.what()),
    QObject::tr("Unkonwn"),
    static_cast<quint64>(EnergoKodTools::eErrorCode::eUn
    known)); \
    } \
    catch(...) \
    { \
    gCritical(QObject::tr("Unknown exception occurs!"),
    QObject::tr("Unkonwn"),
    static_cast<quint64>(EnergoKodTools::eErrorCode::eUn
    known)); \
    }

    Gdzie gCritical jest czymś takim:

    inline void gCritical(QString aText, QString aSender, quint64 aErrorCode)
    {
    Errors::instance()->error(aText, eErrorType::eCritical, aSender,
    aErrorCode);
    gMessage(QMessageBox::Critical, QObject::tr("Critical"), aText,
    QStringLiteral("Error: %1\nModule: %2\nCode:
    %3").arg(aText).arg(aSender).arg(aErrorCode));
    }

    Errors to klasa "silnik", singleton zbierania błędów (do ew.
    wyświetlenia i ew. zaraportowania).
    A gMessage to:

    inline void gMessage(QMessageBox::Icon aIcon, QString aShortText,
    QString aInformativeText, QString aDetailedText = QStringLiteral(""))
    {
    QTextStream lErrStream(stderr);
    lErrStream << QObject::tr("%1
    %2\n%3").arg(qApp->applicationName()).arg(aShortText
    ).arg(aInformativeText);
    if(!aDetailedText.isEmpty())
    lErrStream << endl << aDetailedText;

    QMessageBox lMessage;
    lMessage.setText(aShortText);
    lMessage.setInformativeText(aInformativeText);
    lMessage.setDetailedText(aDetailedText);
    lMessage.setIcon(aIcon);
    lMessage.exec();
    }

    I wtedy wszystko jest proste...

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: