next up previous contents
Next: Работа со смешанными языками. Up: С++ Previous: Коммуникаторы.   Contents

Исключения

Интерфейс C++ для MPI включает в себя стандартный обработчик ошибок
[]MPI::ERRORS_THROW_EXCEPTIONS для использования с функциями-членами Set_errhandler().
MPI::ERRORS_THROW_EXCEPTIONS может быть установлен или получен только функциями С++. Если программа, написанная на другом языке при выполнении вызывает ошибку, вызывающую обработчик ошибок MPI::ERRORS_THROW_EXCEPTIONS, исключение будет передано выше через стек вызова, пока код С++ его не перехватит. Если такого кода нет, поведение не определено. В многопоточных средах, или в случае возникновения ошибки в неблокирующей функции MPI во время ее фонового выполнения, поведение зависит от реализации.

Обработчик ошибок MPI::ERRORS_THROW_EXCEPTIONS заставляет программу инициировать
MPI::Exception для любого кода возврата MPI кроме MPI::SUCCESS. Внешний интрефейс для класса MPI::Exception определен следующим образом: namespace MPI { class Exception { public: Exception(int error_code); int Get_error_code() const; int Get_error_class() const; const char *Get_error_string() const; }; }; Совет разработчикам: Исключение будет сгенерировано внутри тела функции
MPI::ERRORS_THROW_EXCEPTIONS. Предполагается, что после генерации исключения управление будет возвращено пользователю. Некоторые функции MPI определяют в параметрах некоторую возвращаемую информацию в случае возникновения ошибки при определенном MPI_ERRORS_RETURN. Тот же тип возвращаемой информации должен определен и для возникших исключений. Например, MPI_WAITALL помещает код ошибки каждого запроса в соответствующее место статусного массива и возвращает код ошибки MPI_ERR_IN_STATUS. При использовании MPI::ERRORS_THROW_EXCEPTIONS предполагается что перед генерацией исключения в массиве статуса будут установлены соответствующим образом коды ошибок. []



Alex Otwagin 2002-12-10