无法解决的问题,AfxBeginThread产生异常?
yonk 2006-06-14 06:17:06 这是个服务器程序,首先介绍下程序的运行的情况。
程序运行时有115个线程在活动。其中有大部分线程是发送线程。在socket结束后该线程将结束。当有socket连接时,会创建新的发送线程。
下面粘出异常时的callstack:
_AfxMsgFilterHook(int 0, unsigned int 0, long 217495324) line 708 + 16 bytes
USER32! 77dff417()
USER32! 77e12fc0()
USER32! 77e131d2()
NTDLL! 77f91baf()
USER32! 77e12a2f()
USER32! 77e12e67()
USER32! 77e140ce()
USER32! 77df5192()
USER32! 77dfb43b()
USER32! 77dfb515()
USER32! 77df3e1d()
USER32! 77df3da7()
__crtMessageBoxA(const char * 0x0cf6bcfc, const char * 0x1024e89c `string', unsigned int 73746) line 65
CrtMessageWindow(int 2, const char * 0x5f4cd9e8 THIS_FILE, const char * 0x0cf6ce30, const char * 0x00000000, const char * 0x0cf6ee54) line 520 + 22 bytes
_CrtDbgReport(int 2, const char * 0x5f4cd9e8 THIS_FILE, int 230, const char * 0x00000000, const char * 0x00000000) line 419 + 76 bytes
AfxAssertFailedLine(const char * 0x5f4cd9e8 THIS_FILE, int 230) line 39 + 20 bytes
AfxAssertValidObject(const CObject * 0x023037e0 {CObject}, const char * 0x5f4cd9e8 THIS_FILE, int 230) line 95 + 13 bytes
AfxEndThread(unsigned int 0, int 1) line 231
_AfxThreadEntry(void * 0x0012f71c) line 132
_threadstartex(void * 0x02307c20) line 212 + 13 bytes
KERNEL32! 77e6b388()
从中可以知道异常引发的位置。下面是我的拙见,希望有经验的人给予指点,在此先谢过。
上面所列callstack,"AfxAssertFailedLine"往上是出现异常时弹出提示窗口进行的系列操作。它也抛出了一个异常,只是我们不必关注它。
需要引起注意的是"_AfxThreadEntry"及"_threadstartex"。后者出现在CRT目录下的threadex.c文件中。最终可以定格在函数CWinThread::CreateThread中。继续可以追踪来源是"AfxBeginThread"函数,即启动线程部分。
_AfxThreadEntry出现异常的部分,应该是一个线程结束的位置。从这一点来说,问题应当是出在线程退出时。然而不管如何,其出现异常终究是比较奇怪的。请教如何解决该问题?谢谢诸位!