eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingAda Tutorial - w Instytucie Lotnictwa › Re: Ada Tutorial - w Instytucie Lotnictwa
  • Path: news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!3.eu.feeder.erj
    e.net!feeder.erje.net!2.eu.feeder.erje.net!newsfeed.xs4all.nl!newsfeed9.news.xs
    4all.nl!85.12.16.69.MISMATCH!peer02.ams1!peer.ams1.xlned.com!news.xlned.com!pee
    r04.fr7!futter-mich.highwinds-media.com!news.highwinds-media.com!fx24.fr7.POSTE
    D!not-for-mail
    Subject: Re: Ada Tutorial - w Instytucie Lotnictwa
    Newsgroups: pl.comp.programming
    References: <c...@g...com>
    <btKtE.25850$wd2.16727@fx24.fr7>
    <9...@g...com>
    From: Szyk Cech <s...@s...pl>
    User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
    Thunderbird/60.6.1
    MIME-Version: 1.0
    In-Reply-To: <9...@g...com>
    Content-Type: text/plain; charset=utf-8; format=flowed
    Content-Language: pl-PL
    Content-Transfer-Encoding: 8bit
    Lines: 90
    Message-ID: <W8lAE.148935$wd2.140925@fx24.fr7>
    X-Complaints-To: abuse(at)newshosting.com
    NNTP-Posting-Date: Tue, 07 May 2019 19:38:30 UTC
    Organization: Newshosting.com - Highest quality at a great price! www.newshosting.com
    Date: Tue, 7 May 2019 21:38:29 +0200
    X-Received-Bytes: 4064
    X-Received-Body-CRC: 1221694303
    Xref: news-archive.icm.edu.pl pl.comp.programming:213484
    [ ukryj 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: