Езикови средства за създаване на усотйчив код
| Информационни технологии | 2009-12-04 | 74 сваляния |
19 Езикови средства за създаване на усотйчив код. Предоставени от 32 битова среда възможности за целта. Въведение в SEH механизма. Терминираща обработка (__finally). Възможни двусмислия при наличие на терминиращи блокове.
-
Въведение в SEH.
SEH(Structure Exception Handling) структурирана обр. на изключителни ситуации.
Това е вграден механизъм за обработка на софтуерни и хардуерни изкл. ситуации.
Не добре структуриран код:
int ConcStr( TCHAR* pszDest, TCHAR* pszSrc, int cDest ){
TCHAR* pResult = NULL;
if( pszDest && pszSrc ){
int nDest = lstrlen( pszDest);
int nSrc = lstrlen( pszSrc);
if(( nDest + nSrc) < cDest ){
pResult = lstrcat( pszDest, pszSrc );
}
}
if ( pResult ){
return lstrlen (pResult);
}
else{
return 0;
}
}
Добре структуриран код:
int ConcStr( TCHAR* pszDest, TCHAR* pszSrc, int cDest )
{
__try
{
TCHAR* pResult = lstrcat ( pszDest, pszSrc );
return lstrlen( pResult );
}
__except( EXCEPTION_EXECUTE_HANDLER )
{
return 0;
}
}
Exception ще се генерира във вторият случай.
-
При липса на
Блокът след exception handler ще се изпълни при наличие на exception в try. Блокът exception се изпълнява в обсега на try.
В 32 битова среда има следните възможности за прихващане и обработка на exception:
-
Може да се ползва SEH механизма на ОС.
-
Може да се ползва собствения за езика механизъм за обработка на exceptions.
-
Възможна е комбинация то 1 и 2.
При откриване на exception става:
-
Изпълняваната нижка се прекратява.
-
Управлението се предава от usermode в kernelmode (ядрото на ОС поема управлението).
Търси се начин за реакция чрез exception блок. Ако има то тоий се изпълнява, а ако няма диспечера генерира служебен exception handler.
Ако има блок exception handler то:
-
Да се изчисти паметта от излишни данни.
-
Да се възстановят операциите в БД (ако има).
-
Да се освободят заетите ресурси.
-
В LOG файл може да се запише информация.
-
Диалогов прозорец с полезна информация.
-
Терминираща обработка (__finally).
__finally представлява блок за който може да се гарантира че винаги ще се изпълни.
BOOL Myfunc()
{
Тагове от реферата: усотив, съзне, средст, икови











