社区
进程/线程/DLL
帖子详情
如何在TerminateThread一个线程时,释放该线程的资源?
_china
2003-10-17 02:20:55
如题,多谢。
...全文
144
9
打赏
收藏
如何在TerminateThread一个线程时,释放该线程的资源?
如题,多谢。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
xiaohyy
2003-11-22
打赏
举报
回复
最常用的做法 是用事件对象
在线程中等待该对象被通知才退出
::WaitForSingleObject(hEvent,INFILITI);
vcforever
2003-11-21
打赏
举报
回复
使用TerminateThread函数之后,线程的堆栈会被保留起来,直到进程运行结束,这是微软专门设计的,目的是为了在TerminateThread之后,其他的线程再访问该线程的资源时不至于出现非法访问的错误!
GR
2003-11-21
打赏
举报
回复
用这函数总是要有后遗症。
除非模仿VC撤消资源的动作。几乎不太可能。
qdcnc168
2003-11-21
打赏
举报
回复
设置一个变量,然后在线程中做到某一步的时候就检测变量,如果变成指定的一个值的时候就退出!
fantiyu
2003-10-19
打赏
举报
回复
如果不想因为TerminateThread引发问题,一定要让线程自己正常退出
核桃2000
2003-10-18
打赏
举报
回复
还是让它正常退出。我常用的方式是,设置一个共有变量,在线程中检测该变量的值,判断是否终止线程。
fyfsoft
2003-10-17
打赏
举报
回复
no approaches
if not, Microsoft would not warn developers extremly of this means to terminate a thread
wuxfBrave
2003-10-17
打赏
举报
回复
不要用TerminateThread好了,正常退出
SeekTruth
2003-10-17
打赏
举报
回复
我也很想知道.
C++实现的可以安全的暂停、继续、停止
线程
的
线程
类和Sample
在使用
线程
时
,最麻烦的就是
线程
的同步控制,如暂停、继续、停止(包括暂停状态下)等。虽然微软提供了 Suspend
Thread
、
Terminate
Thread
等函数“似乎”可以完成这个功能,但如果你在代码里使用这些函数,则往往会遇到各种问题(比如Suspend
Thread
时
正好在CRT分配内存的锁中造成其他
线程
也跟着锁死,
Terminate
Thread
时
资源
未
释放
)等。 本人经过试验和总结,整理出可以安全的进行暂停、继续、停止
线程
执行的
一个
线程
类,能非常方便的对
线程
进行控制。 附件里是源码和Sample程序,并有详细的使用说明。
C++ 实现 暂停、继续、停止
线程
的
线程
类 和 Demo
虽然微软提供了 Suspend
Thread
、
Terminate
Thread
等函数“似乎”可以完成这个功能,但如果你在代码里使用这些函数,则往往会遇到各种问题。附件里是源码和Demo程序,并有详细的使用说明。(转) 亲测好用: 简单的说就是用开辟
一个
线程
用来监测两个事件(while 循环,循环内包含了你想要处理的动作,比如此例中的更新进度条),通过控制两个事件的状态来控制循环的启动、暂停和继续。 有个小Bug: BOOL CF
Thread
::Is
Thread
Running() const { 注释 //if (FALSE == bRet) 这一段 }
C++11
线程
的中断,继续以及停止
C++11关于thead的应用,利用std::condition std::mutex提供如何中断,停止和继续功能,
c++多
线程
的创建挂起执行与销毁
1. 创建
一个
基于对话框的应用程序。并增加如图所示控件;分别为3个进度条控件关联三个进度条类型的变量;并在对话框的初始化函数中,设定进度条的范围;为编辑框关联
一个
整型的变量;为12个按钮添加消息处理函数; 2. 定义结构体:用做
线程
函数的参数传递 typedef struct
Thread
info{ CProgressCtrl *progress;//进度条对象 int speed; //进度条速度 int pos; //进度条位置 }
thread
,*lp
thread
; 3. 为对话框增加三个句柄,用于标识各个
线程
; HANDLE h
Thread
1; //
线程
1
线程
句柄 HANDLE h
Thread
2; //
线程
2
线程
句柄 HANDLE h
Thread
3; //
线程
3
线程
句柄 在增加三个结构体类型的变量,用做
线程
函数的参数传递; HANDLE h
Thread
1; //
线程
1
线程
句柄 HANDLE h
Thread
2; //
线程
2
线程
句柄 HANDLE h
Thread
3; //
线程
3
线程
句柄 4. 新增
一个
静态的全局变量,用于记录所有
线程
的状态:static int GlobalVar=10000; 5. 声明并编写
线程
函数,注意只能有
一个
参数,且函数的返回值类型也是固定的;函数名可以自定义; DWORD WINAPI
Thread
Fun(LPVOID p
thread
);//
线程
入口函数 6. 在启动按钮的消息处理函数中编写如下代码:
thread
1.progress=&m_progress1;//进度条对象
thread
1.speed=100;//速度
thread
1.pos=0;//初始位置 h
Thread
1=Create
Thread
(NULL,0,
Thread
Fun,&
thread
1;,0,0);//创建并开始
线程
if (!h
Thread
1) { MessageBox("创建
线程
失败"); } 7. 编写
线程
函数(一般是
一个
死循环,或者需要花费
时
间很长的算法!否者就失去了多
线程
的意义) DWORD WINAPI
Thread
Fun(LPVOID p
thread
) //
线程
入口函数 { lp
thread
temp=(lp
thread
)p
thread
;//参数强制转换为结构体类型 temp->progress->SetPos(temp->pos); //设置被传递过来的进度条的位置 while(temp->posspeed); /设置速度 temp->pos++; //增加进度 temp->progress->SetPos(temp->pos); //设置进度条的新位置 GlobalVar--; if(temp->pos==20) { temp->pos=0; //进度条满则归0 } } return true; } 8. 在挂起按钮函数中,编写如下代码: if(Suspend
Thread
(h
Thread
1)==0xFFFFFFFF) { MessageBox("挂起失败!进程可能已经死亡或未创建!"); return; } 9. 在执行按钮函数中,编写如下代码: if(Resume
Thread
(h
Thread
1)==0xFFFFFFFF) { MessageBox("执行失败!进程可能已经死亡或未创建!"); return; } 10. 在停止按钮函数中,编写如下代码: if(
Terminate
Thread
(h
Thread
1,0))//前些终止
线程
{ CloseHandle(h
Thread
1);//销毁
线程
句柄 } else { MessageBox("终止进程失败!"); } 11. 为应用程序添加WM_TIMER消息,实
时
更新全局变量的值到编辑框;
解析C/C++中如何终止
线程
的运行
想要终止
线程
的运行,可以使用以下方法: 1、
线程
函数返回(最好使用该方法)。 2、通过调用Exit
Thread
函数,
线程
将自行撤消(最好不使用该方法)。 3、同
一个
进程或另
一个
进程中的
线程
调用
Terminate
Thread
函数(应避免使用该方法)。 4、ExitProcess和
Terminate
Process函数也可以用来终止
线程
的运行(应避免使用该方法)。 下面将详细介绍终止
线程
运行的方法:1-4,并说明
线程
终止运行
时
会出现何种情况:5。 1、
线程
函数返回 始终都应该将
线程
设计成这样的形式,即当想要
线程
终止运行
时
,它们就能够返回。这是确保所有
线程
资源
被正确地清除的唯一办法。 如果
线程
能够返
进程/线程/DLL
15,471
社区成员
49,182
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章