Хелпикс

Главная

Контакты

Случайная статья





Теоретические сведения. Обработчик завершения



Теоретические сведения

При разработке больших многомодульных программ зачастую окончательную их отладку и тестирование проводят позже, чтобы не отвлекаться от логики написания программы. Но подозрительные места (в которых могут возникнуть исключительные ситуации) оформляют соответствующим образом, с возможностью реакции на возникшее исключение. Участок программы, в котором предполагается возникновения исключения, называют защищаемым блоком, а участок, где записаны действия, выполняемые в случае исключения – обработчиком.

К исключительным ситуациям относятся деление на 0 в арифметических выражениях, нарушение правил адресации, различные сбои и т.д.

Операционная система Windows предоставляет службу Structured Exception Handling (SEH), которая позволяет реагироваь на исключительные ситауции.

SEH предоставляет две возможности:

- обработка завершений;

- обработка исключений.

Обработчик завершения

В Microsoft Visual C++ данные блок оформляет так:

__try{

//защищаемый блок

}

__finally

{

//обработчик завершений

}

Операционная система совместно с компилятором гаратирует, что код блока finally будет выполнене независимо от того, произойдет в защищенном блоке исключение или нет. Обработка проиисходит даже при наличие в защищаемом блоке операторов goto, return, break и тому подобных.

Рассмотрим пример.

DWORD Funcenstein1()

{

DWORD dwTemp;

// действия

__try{

//защищаемый блок

//запрос разрешения на доступ к разделяемым данным

WaitForSingleObject(g_hSem, INFINITE);

g_wProtectedData=5;

dwTemp= g_wProtectedData;

return dwTemp;

}

__finally

{

//обработчик завершений

ReleaseSemaphore(g_hSem,1,NULL);

}

dwTemp=9;

retuen dwTemp;

}

 

В данном примере имеет место преждевременных выход из блока try (оператор return dwTemp;). Блок finally разблокирует семафор для других процессов и тем самым гаратнирует корректную работу семафора в межпроцессном взаимодействии независимо от того, как завершится защищаемый блок.



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.