一个困惑的问题? 我有一个线程,在刚开始时在堆上进行了内存分配,在还没有释放这个内存时,我挂起了线程,并且不再启动它;这个时候退出程序是否会出现内存遗漏?如果会内存遗漏,我应该如何释放这块内存,应为分配只在线程中进行? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 会内存遗漏,可用如下方法:(1)主线程初始化时:HANDLE m_hKillEvent2;BOOL bChildThreadExit = FALSE;m_hKillEvent2 = CreateEvent(NULL,FALSE,FALSE,NULL);(1)退出程序时,例如OnDestroy(){ SetEvent(m_hKillEvent2); Sleep(2000); CloseHandle(m_hKillEvent2); While(!bChildThreadExit) { Sleep(1000); }}(2)YourThread.Resume();(3)UINT YourThread(LPVOID lpParam){CMainFrame *pMainFrm=(CMainFrame *)lpParam; while(1) { if( WaitForSingleObject(pMainFrm->m_hKillEvent2, 2000) == WAIT_OBJECT_0 ) { //...do job to release your heap mem pMainFrm->m_bChildThreadExit = TRUE; break; } } return 1;} 这个时候退出程序是否会出现内存遗漏?________________不会. 系统会为你释放所有的内存, CLOSE 所有的 HANDLE, 释放所有的资源. 对于指向内存的指针,指针分配后初始化NULL,释放后NULL就可以了。 I think there is no memory leak...if you alloc memory in the program heap, 如何做windows版本判断并调用相应处理模块 CStatusBarCtrl控件怎么用? DLL设置断点无效 关于ctreectl的文件夹图标打开和关闭 从SQL SERVER数据库中,怎么把数据导出到EXCEL表中 请问怎么通过修改注册表来修改系统盘符 1.如何判断一个窗口或其下的控件处于激活状态或得到焦点 如何实现:将windows程序的图标添加到IE的工具条上? 中文为什么显示乱码 有麻烦,提取系统路径出错~~~~~:( 如何使用循环(例如:数组)实现对多个串口初始化? 高分求教:如果有效减少I/O操作。
(1)主线程初始化时:
HANDLE m_hKillEvent2;
BOOL bChildThreadExit = FALSE;
m_hKillEvent2 = CreateEvent(NULL,FALSE,FALSE,NULL);(1)退出程序时,例如
OnDestroy()
{
SetEvent(m_hKillEvent2);
Sleep(2000);
CloseHandle(m_hKillEvent2); While(!bChildThreadExit)
{
Sleep(1000);
}
}(2)YourThread.Resume();
(3)
UINT YourThread(LPVOID lpParam)
{
CMainFrame *pMainFrm=(CMainFrame *)lpParam;
while(1)
{
if( WaitForSingleObject(pMainFrm->m_hKillEvent2, 2000)
== WAIT_OBJECT_0 )
{
//...do job to release your heap mem
pMainFrm->m_bChildThreadExit = TRUE;
break;
}
}
return 1;
}
________________
不会. 系统会为你释放所有的内存, CLOSE 所有的 HANDLE, 释放所有的资源.