Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Задачи по СППО.doc
Скачиваний:
4
Добавлен:
24.09.2019
Размер:
194.56 Кб
Скачать

3. Прерывания и структурная схема обработки исключений:

  1. При выполнении программы произошло исключение. Какое значение получит переменная I после выполнения данного фрагмента программы (примеры 1 и 2) при условии, что I изменяется только в указанных операторах, и для данного исключения:

1. Значение выражения Filter1 = EXCEPTION_CONTINUE_SEARCH

Значение выражения Filter2 = EXCEPTION_CONTINUE_SEARCH

Значение выражения Filter3 = EXCEPTION_EXECUTE_HANDLE

2. Значение выражения Filter1 = EXCEPTION_CONTINUE_SEARCH

Значение выражения Filter2 = EXCEPTION_CONTINUE_SEARCH

Значение выражения Filter3 = EXCEPTION_CONTINUE_EXECUTION

3. Значение выражения Filter1 = EXCEPTION_CONTINUE_SEARCH

Значение выражения Filter2 = EXCEPTION_CONTINUE_EXECUTION

Значение выражения Filter3 = EXCEPTION_EXECUTE_HANDLE

4. Значение выражения Filter1 = EXCEPTION_CONTINUE_SEARCH

Значение выражения Filter2 = EXCEPTION_EXECUTE_HANDLE

Значение выражения Filter3 = EXCEPTION_CONTINUE_EXECUTION

(Символом отмечено место в программе, где произошло исключение)

Пример 1.

__try { ........ I = 0 ; ............

__try { ........ I = I + 1 ; ............

__try { ........ I = I + 2 ; ............

__try { ........ I = I + 3 ; ............

__try { .... .... I = I + 4 ; ............ }

__except ( Filter1 ){ .... I = 0; ..... }

__finally { ..... I = I - 3 ; ..... }

__except (Filter2 ) { .... I = 100; .... }

__finally { ..... I = I - 1 ; ..... }

__except (Filter3 ) { .... I = 200; .... }

....... I = ?

Пример 2.

__try { ........ I = 0 ; ............

__try { ........ I = I + 1 ; ............

__try { ........ I = I + 2 ; ............

__try { ........ I = I + 3 ; ..... .....

__try { .... I = I + 4 ; ......

__try {…}

__finally { … I= 1000; }

}

__except ( Filter1 ){ .... I = 0; ..... }

__finally { ..... I = I – 3 ; ..... }

__except (Filter2 ) { .... I = 100; .... }

__finally { ..... I = I – 1 ; ..... }

__except (Filter3 ) { .... I = 200; .... }

....... I = ?

  1. Что явится результатом выполнения этой функции:

DWORD FuncCounter(void)

{ DWORD dwTemp = 0;

while (dwTemp < 10)

{

__try

{ if (dwTemp == 2)

continue;

if (dwTemp == 3)

break;

}

__finally

{ dwTemp ++; }

dwTemp ++;

}

dwTemp +=10;

return (dwTemp);

}

DWORD FuncExm (void)

{ DWORD dwTemp = 0;

......................................................................

__try

{

WaitForSingleObject (g_hSem, INFINITE) ;

g_dwProtectedData = 5 ;

dwTemp = g_dwProtectedData ;

return (dwTemp);

}

__finally

{

dwTemp = g_dwProtectedData + 100 ;

ReleaseSemaphore (g_hSem, 1, NULL) ;

return (dwTemp) ;

}

dwTemp = 100 ;

return (dwTemp);

}

  1. void ExceptFun (void)

{ int x = 0;

char * lpBuffer = NULL ;

__try {

* lpBuffer = ‘A’ ;

x = 100 / x ;

}

__except (ExceptFilter(&lpBuffer)) {

MessageBox(NULL, “An Exception occurred”, NULL, MB_OK) ;

}

MessageBox(NULL, “Function completed”, NULL, MB_OK) ;

}

LONG ExceptFilter (char **lplpBuffer) {

if (* lplpBuffer == NULL)

{ * lplpBuffer = g_szBuffer ; // Global buffer pointer

return (EXCEPTION_CONTINUE_EXECUTION) ;

}

return (EXCEPTION_EXECUTE_HANDLER) ;

}

void ExceptFun (void)

{ int x = 0;

char * lpBuffer = NULL ;

__try {

* lpBuffer = ‘A’ ;

x = 100 / x ;

}

__except (ExceptFilter(&lpBuffer)) {

MessageBox(NULL, “An Exception occurred”, NULL, MB_OK) ;

}

MessageBox(NULL, “Function completed”, NULL, MB_OK) ;

}

LONG ExceptFilter (char **lplpBuffer) {

if (* lplpBuffer == NULL)

{ * lplpBuffer = g_szBuffer ; // Global buffer pointer

}

return (EXCEPTION_EXECUTE_HANDLER) ;

}