afxendthread错误,请各位帮忙看看什么问题

joeytry 2009-07-16 09:32:37
程序用afxbeginthread创建工作线程,我是在线程代码内部的最后用afxendthread结束。

之前并未出现该问题,上周只对一个全局链表作了插入顺序的调整,结果就成这样了。线程只是从该全局链表中获取属于自己的数据列表,进行插入、删除、读取操作。已经对这些操作执行了必要的lock和unlock,防止并发问题。

跟踪线程,发现afxendthread每次都在_endthreadex出错,由于没有.c文件,在反汇编中发生错误的语句是
1020C3BB call dword ptr [__imp__ExitThread@4 (1024d060)]

报告的错误是:"the thread xxx has exited with code 0(0x0)."
...全文
251 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
EverlastingLove 2009-07-23
  • 打赏
  • 举报
回复
DDD
gg606 2009-07-17
  • 打赏
  • 举报
回复
AfxEndThread(retVal);
return 0;

这两句只需一句就可以了呀
return retVal;
oyljerry 2009-07-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 joeytry 的回复:]
一步步跟踪后发现,原来问题在于我访问一个字符串数组的时候没有进行越界检查,导致出现问题,终于解决。
[/Quote]
^_^,所以还是要先多调试一下..
joeytry 2009-07-16
  • 打赏
  • 举报
回复
一步步跟踪后发现,原来问题在于我访问一个字符串数组的时候没有进行越界检查,导致出现问题,终于解决。
joeytry 2009-07-16
  • 打赏
  • 举报
回复
我的线程代码如下:
UINT ServiceClientThread(void *lpParameter){
int RetVal = 1;
SOCKET sock = (reinterpret_cast<SOCKET>(lpParameter));

MyServer server(sock);
RetVal = server.execute(); //服务器接受客户端请求,并根据客户端请求发送信息。检查过,没有执行afxendthread
server.close(); //释放已经访问过的链表空间,关闭sock等操作
AfxEndThread(retVal);
return 0;
}

在主线程中调用的过程如下:
... //创建sock,绑定端口
while(TRUE){
if((sockfd = accept(listenfd,(struct sockaddr *) &cli,&clilen)) >= 0){
::AfxBeginThread(ServiceClientThread, (LPVOID)sockfd);
}else
...
}

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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