- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
今天主要写的是另一个问题,创建工作线程时,AfxBeginThread返回的CWinThread的对象指针所指的对象在默认情况下会自动删除。如果你不想让他自己删除,而且自己想查看线程信息的话,只需要在创建之后,用返回的CWinThread对象指针来设置m_bAutoDelete成员变量为FALSE即可。
而我很好奇的是,为什么返回的CWinThread可以自动删除呢?
其实光看别人说的自己知道遍罢,其实《深入浅出MFC》中侯老爷子谆谆教导:“在线程结束时,记得把该对象释放掉(利用delete)。”,就是因为这句话,让我的程序中断好几次,错误居然是销毁已经清理了的内存空间。后来查最新资料才知道,默认是会自动删除的。可能侯老爷子当时版本太低,或者其他原因吧。但是侯老爷子说过:“学一样东西,只知道怎么用,但不明白其中的道理,实在是不高明”。再加上本身我就是遇到问题非得心里有底才行,光听别人说是这样,不明白为什么,总觉得心里用的不踏实。好了,废话就不说了,切入正题。
为什么AfxBeginThread函数动态创建的对象会在线程结束后自动销毁呢?难道是有什么消息映射?任何东西究其根源离不开他本身,先去看看AfxbeginThread的源码:
view plaincopy to clipboardprint?
CWinThread*?AFXAPI?AfxBeginThread(AFX_THREADPROC?pfnThreadProc,?LPVOID?pParam,??
????int?nPriority,?UINT?nStackSize,?DWORD?dwCreateFlags,??
????LPSECURITY_ATTRIBUTES?lpSecurityAttrs)??
{??
#ifndef?_MT??
????pfnThreadProc;??
????pParam;??
????nPriority;??
????nStackSize;??
????dwCreateFlags;??
????lpSecurityAttrs;??
??
????return?NULL;??
#else??
????ASSERT(pfnThreadProc?!=?NULL);??
??
????CWinThread*?pThread?=?DEBUG_NEW?CWinThread(pfnThreadProc,?pParam);??
????ASSERT_VALID(pThread);??
??
????if?(!pThread-CreateThread(dwCreateFlags|CREATE_SUSPENDED,?nStackSize,??
????????lpSecurityAttrs))??
????{??
????????pThread-Delete();??
????????return?NULL;??
????}??
????VERIFY(pThread-SetThreadPriority(nPriority));??
????if?(!(dwCreateFlags??CREATE_SUSPENDED))??
????????VERIFY(pThread-ResumeThread()?!=?(DWORD)-1);??
??
????return?pThread;??
#endif?//!_MT)??
}??
没有发现什么端倪,一切很合情合理。但是书上说过AfxEndThread()就像,_beginthread和_endthread一样配对。那让我们去看一下AfxEndThread()。下面是源码:
view plaincopy to clipboardprint?
void?AFXAPI?AfxEndThread(UINT?nExitCode,?BOOL?bDelete)??
{??
#ifndef?_MT??
????nExitCode;??
????bDelete;??
#else??
????//?remove?current?CWinThread?object?from?memory??
????AFX_MODULE_THREAD_STATE*?pState?=?AfxGetModuleThreadState();??
????CWinThread*?pThread?=?pState-m_pCurrentWinThread;??
????if?(pThread?!=?NULL)??
????{??
????????ASSERT_VALID(pThread);??
????????ASSERT(pThread?!=?AfxGetApp());??
??
????????//?cleanup?OLE?if?required??
??????
您可能关注的文档
最近下载
- 2025年1月安徽省普通高中学业水平合格性考试信息技术和通用技术上机真题卷1.docx VIP
- 高考物理模拟试测试题(含答案).doc VIP
- Flash CS6案例教程-教学计划.doc VIP
- 2024年继续教育公需课考试题库及答案 .pdf VIP
- 农村道路施工组织设计.doc VIP
- 儿科医生进修汇报 2PPT课件.pptx VIP
- 2025福建莆田城市建设投资开发集团有限公司招聘有市属国有企业经验人员拟聘笔试历年参考题库附带答案详解(10卷合集).docx
- 2017-2021年安徽师范大学《866音乐分析》历年考研真题汇总.pdf VIP
- 中国哲学史课件(复旦).ppt VIP
- 城市信息模型(CIM)方案.docx VIP
文档评论(0)