VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 460|回复: 7

请教AfxBeginThread的一个问题

[复制链接]
77_avatar_middle
最佳答案
0 
在线会员 发表于 2019-9-4 10:35:51 | 显示全部楼层 |阅读模式
用AfxBeginThread给另外一个类的函数传了一个new出来的内存地址,下面应该delete该内存。那么AfxBeginThread是马上执行,还是会等待系统调度执行,如果AfxBeginThread没有马上执行,而是先执行了delete可怎么办。




上一篇:如何用C++操作sql server读csv文件
下一篇:C++零基础入门关于对象赋值报错问题
51_avatar_middle
最佳答案
82 
online_admins 发表于 2019-9-4 12:48:51 | 显示全部楼层
没十分懂,最好贴个简易的代码出来,确认一下!
线程是异步的,函数调用时同步的
77_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2019-9-4 14:49:38 | 显示全部楼层
相关代码大致如下:
        CDatagram *pSend = NULL;
        pSend = new CDatagram(214);
        CWinThread *pThread = NULL;
        pThread = AfxBeginThread(COTSDlg::Dealinfo, (char *)pSend);
        delete pSend;
这样会不会有问题?
51_avatar_middle
最佳答案
82 
online_admins 发表于 2019-9-4 21:07:01 | 显示全部楼层
dblue73 发表于 2019-9-4 14:49
相关代码大致如下:
        CDatagram *pSend = NULL;
        pSend = new CDatagram(214);

有问题,新开的线程和当前的线程是异步执行的,有可能线程启动的慢,你调用完 delete pSend 之后,Dealinfo 线程函数才刚执行,再访问 参数传递进来的 pSend 肯定会报错的,因为已经被外面 delete 了。
所以稳妥的做法是在 Dealinfo 线程函数内部,使用完 pSend 之后再进行 delete
77_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2019-9-5 09:59:12 | 显示全部楼层
Syc 发表于 2019-9-4 21:07
有问题,新开的线程和当前的线程是异步执行的,有可能线程启动的慢,你调用完 delete pSend 之后,Dealin ...

谢谢,那么我传出的地址被改成了(char *),delete释放内存会不会搞错呢?
51_avatar_middle
最佳答案
0 
在线会员 发表于 2019-9-6 08:43:51 | 显示全部楼层
学习一下  ,我也很疑惑

点评

楼主要对着别人的回帖,去回复,不然对方收不到消息。  发表于 2019-9-6 21:54
58_avatar_middle
最佳答案
43 
online_vip 发表于 2019-9-6 21:55:41 | 显示全部楼层
奔跑的兔子 发表于 2019-9-6 08:43
学习一下  ,我也很疑惑

请教AfxBeginThread的一个问题是我搞错了,全一个头像,我晕了。
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号 )|网站地图wx_jqr

GMT+8, 2020-9-22 21:34

Powered by CcTry.CoM

© 2009-2020 cctry.com

快速回复 返回顶部 返回列表