WEB开发网
开发学院软件开发VC Visual C++中的结构异常处理 阅读

Visual C++中的结构异常处理

 2010-05-25 20:36:09 来源:WEB开发网   
核心提示:2.3、小测试下面一个例子(见清单五)请读者猜测一下函数FuncaDoodleDoo的返回值,(答案为14)DWORD FuncaDoodleDoo(void) {DWORD dwTemp = 0;while (dwTemp 〈 10) {__try {if (dwTemp == 2)continue;if (dwTe

2.3、小测试

下面一个例子(见清单五)请读者猜测一下函数FuncaDoodleDoo的返回值。(答案为14)

DWORD FuncaDoodleDoo(void) {
DWORD dwTemp = 0;
while (dwTemp 〈 10) {
__try {
if (dwTemp == 2)
continue;
if (dwTemp == 3)
break;

__finally {
dwTemp++;

dwTemp++;
}
dwTemp += 10;
return (dwTemp);

FuncaDoodleDoo函数代码

虽然中断处理句柄能够接收出现在try程序段内的绝大部分异常情况,但是如果线程或进程中断执行的话,则finally程序段内的代码不会被执行。调用ExitThread或ExitProcess就会立即造成线程或进程的中断,而不会执行finally程序段。另外,如果其它的应用程序调用ExitThread或ExitProcess而造成你的线程或进程中断,你程序中的finally程序段也不会被执行。一些C函数如abort会调用ExitProcess,也会导致你的finally程序段不被执行。对此你无能为力。但你可以防止你自己提早调用ExitThread或ExitProcess。

2.4、应用例子

我们已经讨论了中断处理句柄的句法及语法。现在我们进一步讨论如何利用中断处理句柄来简化一个比较复杂的编程问题。

首先让我们来看一个没有使用中断处理句柄的例子,程序源代码见例6。

BOOL Funcarama1 (void) {
HANDLE hFile = INVALID_HANDLE_VALUE;
LPVOID lpBuf = NULL;
DWORD dwNumBytesRead;
BOOL fOk;
hFile = CreateFile("SOMEDATA.DAT", GENERIC_READ, FILE_SHARE_READ,
NULL, OPEN_EXISTING, 0, NULL);
if (hFile == INVALID_HANDLE_VALUE) {
return (FALSE);
}
lpBuf = VitualAlloc(NULL, 1024, MEM_COMMIT, PAGE_READWRITE);
if (lpBuf == NULL) {
CloseHandle(hFile);
return (FALSE);
}
fOk = ReadFile(hFile, lpBuf, 1024, &dwNumBytesRead, NULL);
if (!fOk || (dwNumBytesRead == 0)) {
VirtualFree(lpBuf, MEM_RELEASE | MEM_DECOMMIT);
CloseHandle(hFile);
return (FALSE);
}
// Do some calculation on the data.
.
.
.

上一页  1 2 3 4 

Tags:

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接