社区
进程/线程/DLL
帖子详情
线程资源释放有关问题!!!
joners
2002-06-04 10:52:50
VC SDK 下,用createthread()创建了一个线程.
我的问题:
1.当线程从上到下执行完毕后,线程中定义的变量等就被系统释放了呢?
还是要释放线程的句柄后其中的变量才被释放?
2.如果使用createthread()创建线程,该使用哪"两个"(我记得是两个)API函数才能完全释放线程资源?
以前看过,忘记啦.现在写程序要用到,请帮忙:)
...全文
518
16
打赏
收藏
线程资源释放有关问题!!!
VC SDK 下,用createthread()创建了一个线程. 我的问题: 1.当线程从上到下执行完毕后,线程中定义的变量等就被系统释放了呢? 还是要释放线程的句柄后其中的变量才被释放? 2.如果使用createthread()创建线程,该使用哪"两个"(我记得是两个)API函数才能完全释放线程资源? 以前看过,忘记啦.现在写程序要用到,请帮忙:)
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
16 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
joners
2002-06-09
打赏
举报
回复
结账
masterdog
2002-06-08
打赏
举报
回复
哦!因为这两天不在,所以没有及时看到你的回复,你的理解很对,其实很简单,不是吗?
masterdog
2002-06-08
打赏
举报
回复
CreateThread的确占用了资源,我给你的那个例子就说明这个问题的,如果你安装了BoundsChecker就会发现如果不调用CloseHandle会出现资源泄漏
joners
2002-06-07
打赏
举报
回复
up
joners
2002-06-07
打赏
举报
回复
iterator(螃蟹)你问的不错:
我的这个贴子的意思是,想问一下,如果使用例如下面的代码在一个主进程中创建子线程后,如下:
HANDLE hThread=CreateThread(...);
if(hThread==NULL)
MessageBox(NULL,"CREATE THREAD ERROR","SYS",0);
问题:当此子线程在主线程中执行结束后,hThread句柄资源要不要释放掉,用什么函数?
问题:还需释放其他的什么资源么?
:)
iterator
2002-06-07
打赏
举报
回复
有内存泄漏的是_beginthread函数。用CreateThread没问题。
你的问题应该是,如何确保主线程最后退出。纯粹是设计问题,如果你举出具体的应用实例,我想会更有帮助
joners
2002-06-07
打赏
举报
回复
怎么没人来
joners
2002-06-06
打赏
举报
回复
masterdog(掌门狗):
对你的代码,我的理解如下。
线程采用判断g_bRunFlag的方法来进行,如果不为2则WSAWaitForMultipleEvents等待1秒,超时后,循环继续进行,判断g_bRunFlag,继续执行WSAWaitForMultipleEvents;
直到g_bRunFlag为2时候,跳过while,return 退出。
这时候主程序的GetExitCodeThread(hThread,&dwExitCode),获得退出消息,退出其while循环,最后CloseHandle( hThread )释放资源!
对不对?
masterdog
2002-06-04
打赏
举报
回复
刚刚不就是这个意思吗,后写的那个函数确保会响应主线程退出之前设置的退出标志,最多1秒钟后线程函数退出循环呀!然后你在主线程中调用CloseHandle避免资源泄漏.
joners
2002-06-04
打赏
举报
回复
masterdog(掌门狗)你说的对,用WSAWaitForMultipleEvents()是会出现消息不响应的问题.
我想问的是运行结束的线程的资源怎么样才能,完全释放?
我下了,明天再来....
masterdog
2002-06-04
打赏
举报
回复
同样的函数:
DWORD urThreadFunc(LPVOID lpParameter)
{
//do sth.
...
while(g_bRunFlag != 2)//退出标志
int nReturnCode = ::WSAWaitForMultipleEvents(..,1000/*ur timeout value*/);
return 0;
}
其中g_bRunFlag是全局变量,定义退出标志,由主线程控制.
masterdog
2002-06-04
打赏
举报
回复
当然有可能了,如果线程函数如下设计:
DWORD urThreadFunc(LPVOID lpParameter)
{
//do sth.
...
int nReturnCode = ::WSAWaitForMultipleEvents(..,INFINITE);
}
恰好此时该来的事件永远不会发生,就会出问题.但是这与你的设计有关系.
}
joners
2002-06-04
打赏
举报
回复
masterdog(掌门狗)
你好,我看你的程序,采用了一个永久循环来监测是否线程推出,这样写会不会,导致系统的消息不响应啊,用线程的目的之一,就是想避免例如WHILE循环这样的程序导致系统消息不响应的问题,这样一来.....呵呵
pp_ipr()
你能给出具体释放线程资源的例子么?
terminatethread()函数强行终止一个线程,会有垃圾的,该怎么解决?
pp_ipr
2002-06-04
打赏
举报
回复
按照侯sir深入浅出mfc所说,一是线程函数执行完后,系统调用ExitThread进行善后处理(自己也可在程序里调用此函数结束自己),二是进程结束导致线程结束或者别的线程调用terminatethread终结掉他
masterdog
2002-06-04
打赏
举报
回复
线程函数和普通函数没有什么区别呀?如果线程函数退出了,函数体声明的局部变量不就被"释放"了吗!我想你是不是没有关闭句柄呢?
HANDLE hThread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)urThreadFunc,NULL,(DWORD)0,NULL);
do
{
GetExitCodeThread(hThread,&dwExitCode);
}
while(dwExitCode);
CloseHandle( hThread ); //important
joners
2002-06-04
打赏
举报
回复
UP
线程
资源
释放
问题
解决
一般来说,Posix的
线程
终止有两种情况:正常终止和非正常终止。
线程
主动调用pthread_exit()或者从
线程
函数中return都将使
线程
正常退出,这是可预见的退出方式;非正常终止是
线程
在其他
线程
的干预下,或者由于自身运行出错(比如访问非法地址)而退出,这种退出方式是不可预见的。不论是可预见的
线程
终止还是异常终止,都会存在
资源
释放
的
问题
,在不考虑因运行出错而退出的前提下,如何保证
线程
终止时能顺利
线程
资源
是否
释放
的
问题
关于
线程
退出和
线程
资源
回收的有关
问题
线程
退出有多种方式,如return,pthread_exit,pthread_cancel等;
线程
分为可结合的(joinable)和 分离的(detached)两种,如果没有在创建
线程
时设置
线程
的属性为PTHREAD_CREATE_DETACHED,则
线程
默认是可结合的。可结合的
线程
在
线程
退出后不会立即
释放
资源
,必须要调用pthread_join来显式的结束
线程
。分离的
线程
在
线程
退出时系统会自动回收
资源
。 一、设置分离
线程
的几种方法: 1.在创建
线程
时加上 pthrea
linux c语言
线程
资源
释放
最近做了多
线程
并发网络编程的时候出现了一个
问题
。程序在运行的过程中,占用的内存会越来越大。起初我怀疑是程序有指针没有被free,导致内存泄漏。后来通过调试才发现, 原来是
线程
结束之后,
线程
的
资源
没有得到
释放
。 Linux系统中程序的
线程
资源
是有限的,表现为对于一个程序其能同时运行的
线程
数是有限的。而默认的条件下,一个
线程
结束后,其对应的
资源
不会被
释放
,于是,如果在一个程序中,反复建立
线程
,而线
java
释放
线程
资源
_Java
线程
之
释放
锁,
释放
资源
,
释放
CPU
多
线程
中的wait与sleep到底谁
释放
了锁首先,多
线程
中会使用到两个延迟的函数,wait和sleep。wait是Object类中的方法,而sleep是Thread类中的方法。sleep是Thread类中的静态方法。无论是在a
线程
中调用b的sleep方法,还是b
线程
中调用a的sleep方法,谁调用,谁睡觉。最主要的是sleep方法调用之后,并没有
释放
锁。使得
线程
仍然可以同步控制。sleep不会让出...
线程
退出后
资源
释放
问题
线程
退出后
资源
释放
问题
一、创建
线程
时使用默认属性 使用pthread_create()创建
线程
时,设置属性为NULL,
线程
退出时该
线程
占用的
资源
不会
释放
。比如遇到过反复创建某个
线程
后返回,会导致其占用的虚拟内存不断增加,最终导致系统
资源
不可用。 二、
线程
退出时如何
释放
占用
资源
有几种方法,实测方法2可行,其他可以自己尝试 1.可以在pthread_create时设置
线程
属性为unjoinable 2.简单方法,
线程
函数头加上 pthread_detach(pthread_self()) 3.在主
线程
适时调
进程/线程/DLL
15,471
社区成员
49,181
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章