无法解决的问题,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出现异常的部分,应该是一个线程结束的位置。从这一点来说,问题应当是出在线程退出时。然而不管如何,其出现异常终究是比较奇怪的。请教如何解决该问题?谢谢诸位!
...全文
440 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
yonk 2006-06-16
  • 打赏
  • 举报
回复
谢谢楼上诸位先。不过问题不是出在同步没做好这一点上。结贴。
newplayer1 2006-06-15
  • 打赏
  • 举报
回复
我也在做类似的东西,线程几千个,发和收都处理,问题可能出在创建线程传递的参数,这个问题曾经捆饶过我几天,传的是地址,所以无论哪个线程均可以改变其内容,不做好同步,就会出现这样的问题
周江涛 2006-06-15
  • 打赏
  • 举报
回复
线程太多了,改成异步IO吧。
yonk 2006-06-15
  • 打赏
  • 举报
回复
线程大部分是用来发送的。接收采用的是iocp,接收线程只有一个。发送线程是对每个连接的socket就创建一个,socket一旦被关闭,发送线程就结束了。同步没问题的。
duyhui 2006-06-14
  • 打赏
  • 举报
回复
是啊,115各线程,有发送,有接受,楼主要做好同步
DentistryDoctor 2006-06-14
  • 打赏
  • 举报
回复
看样子是同步没做好。

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧