开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 1155|回复: 8
收起左侧

[已解决] 关于退出多线程的先后顺序问题!

 关闭 [复制链接]
结帖率:100% (9/9)
发表于 2021-3-18 10:06:09 | 显示全部楼层 |阅读模式   广东省江门市
99精币
  
窗口程序集名保 留  保 留备 注
(未填写程序集名)   
变量名类 型数组备 注
变量名类 型数组备 注
许可证整数型2 

子程序名返回值类型公开备 注
_按钮1_被单击 浏览
如果真 (许可证 [1] = 0)
许可证 [1]创建进入许可证 ()
启动线程 (&浏览_多线程, , 线程句柄)

子程序名返回值类型公开备 注
浏览_多线程  
进入许可区 (许可证 [1]).如果真 (编辑框1.内容 = “” 编辑框2.内容 = “”)
标签5.标题 = “页数不能为空!”
退出许可区 (许可证 [1])
删除进入许可证 (许可证 [1])
退出线程 ()
返回 ()


i支持库列表   支持库注释   
EThread.支持库 ethreadnew(未知支持库)




请求各位对多线程比较熟悉的大佬,使用多线程操作的时候需要立即退出线程要怎样操作才最正确?


问题1:结束线程前是否需要退出许可区?
    退出许可区 (许可证 [1])
    删除进入许可证 (许可证 [1])
    退出线程 ()



问题2:还是直接返回就可以?
    返回 ()


问题3:是否需要关闭线程句柄?
    退出许可区 (许可证 [1])
    删除进入许可证 (许可证 [1])
    退出线程 ()

    关闭线程句柄(线程句柄)


问题4:不使用删除进入许可证,直接使用 许可证 [1]=0 赋值,是否可以?
    退出许可区 (许可证 [1])
    许可证 [1]=0
    退出线程 ()




问题5:关闭线程句柄是不是等同于 线程句柄=0 赋值?
    退出许可区 (许可证 [1])
    删除进入许可证 (许可证 [1])
    退出线程 ()

    关闭线程句柄(线程句柄)



问题6:退出许可区、删除进入许可证、退出线程、关闭线程句柄,它们的先后顺序要怎么排列才正确?
    退出许可区 (许可证 [1])
    删除进入许可证 (许可证 [1])
    退出线程 ()

    关闭线程句柄(线程句柄)

最佳答案

查看完整内容

问题1:结束线程前是否需要退出许可区? 如果线程过程中有进入了许可证,那么通常在同一个线程流程必须有 退出许可证。许可证通常用于保护临界资源。 问题2:还是直接返回就可以? 如果线程没有用许可证,直接返回就可以完成线程任务。 问题3:是否需要关闭线程句柄? 通常线程句柄操作系统自动管理,不需要关闭线程句柄。 问题4:不使用删除进入许可证,直接使用 许可证 [1]=0 赋值,是否可以? 一般不建议删除许可证。除非你 ...

回答提醒:如果本帖被关闭无法回复,您有更好的答案帮助楼主解决,请发表至 源码区 可获得加分喔。
友情提醒:本版被采纳的主题可在 申请荣誉值 页面申请荣誉值,获得 1点 荣誉值,荣誉值可兑换荣誉会员、终身vip用户组。
快捷通道:申请荣誉值无答案申请取消悬赏投诉有答案未采纳为最佳
结帖率:92% (12/13)
发表于 2021-3-18 10:06:10 | 显示全部楼层   美国
问题1:结束线程前是否需要退出许可区?
如果线程过程中有进入了许可证,那么通常在同一个线程流程必须有 退出许可证。许可证通常用于保护临界资源。

问题2:还是直接返回就可以?
如果线程没有用许可证,直接返回就可以完成线程任务。

问题3:是否需要关闭线程句柄?
通常线程句柄操作系统自动管理,不需要关闭线程句柄。

问题4:不使用删除进入许可证,直接使用 许可证 [1]=0 赋值,是否可以?
一般不建议删除许可证。除非你知晓程序没有线程进入了该许可证,以后也不会有用到该许可证。

问题5:关闭线程句柄是不是等同于 线程句柄=0 赋值?
线程句柄可以类似于一直地址指针,实际上是资源指针。对指针赋值为0,让你不能再通过该指针访问对应线程资源,对线程本身没有任何影响。
同理关闭线程句柄也不对影响线程本身运行。必须强制终止线程才可以,强制终止某个线程,需要用线程句柄来确定是哪个线程。
Closing a thread handle does not terminate the associated thread or remove the thread object. Closing a process handle does not terminate the associated process or remove the process object. To remove a thread object, you must terminate the thread, then close all handles to the thread

问题6:退出许可区、删除进入许可证、退出线程、关闭线程句柄,它们的先后顺序要怎么排列才正确?

开始线程任务
线程非临界代码
进入许可证
线程访问临界资源
退出许可证
线程继续执行非临界代码
执行完毕自动退出

评分

参与人数 1荣誉 +1 收起 理由
笨潴 + 1 热心帮助他人,荣誉+1,希望继续努力(*^__^*) 嘻嘻!

查看全部评分

回复

使用道具 举报

头像被屏蔽
结帖率:92% (11/12)
发表于 2021-3-18 10:34:52 | 显示全部楼层   浙江省温州市
    退出线程 ()
回复

使用道具 举报

结帖率:100% (13/13)
发表于 2021-3-18 10:45:16 | 显示全部楼层   四川省成都市
  
子程序名返回值类型公开备 注
_按钮1_被单击 浏览
如果真 (许可证 [1] = 0)
' 许可证 [1] = 创建进入许可证 () 这儿不要
启动线程 (&浏览_多线程, , 线程句柄)

删除进入许可证 (许可证 [1])
退出线程 ()
子程序名返回值类型公开备 注
浏览_多线程  
进入许可区 (许可证 [1])
如果真 (编辑框1.内容 = “” 编辑框2.内容 = “”)
标签5.标题 = “页数不能为空!”

退出许可区 (许可证 [1])


i支持库列表   支持库注释   
EThread多线程支持库



补充内容 (2021-3-18 10:47):
如给了线程句柄就在关,没给系统自己回收

点评

这种方法不对   广东省江门市  发表于 2021-3-18 11:18
回复

使用道具 举报

结帖率:100% (4/4)
发表于 2021-3-18 10:57:12 | 显示全部楼层   广东省广州市
1、要退出,不然下次进不来
2、同上
3、你可以不关,进程结束操作系统会回收。
4、你这问的不对,应该是不使用退出许可区吧,不行的,退出许可区是要释放锁的,你许可证=0并没有释放锁。
5、跟4差不多,反正是操作系统在管,你自己赋值没用
6、要看实际运用。许可证如果还要用就不要删。退出许可区——关闭线程句柄。就可以了,可以互换位置。

点评

关闭线程句柄(线程句柄)这个东西究竟要不要使用?   广东省江门市  发表于 2021-3-18 11:31
回复

使用道具 举报

结帖率:100% (9/9)
 楼主| 发表于 2021-3-18 11:27:38 | 显示全部楼层   广东省江门市
丿夜曲 发表于 2021-3-18 10:57
1、要退出,不然下次进不来
2、同上
3、你可以不关,进程结束操作系统会回收。

是不是这样?

进入许可区(许可证)
程序代码。。。
关闭线程句柄(线程句柄)
退出线程()
退出许可区(许可证)
回复

使用道具 举报

结帖率:100% (3/3)
发表于 2021-3-18 13:06:12 | 显示全部楼层   河北省保定市


你要理解许可证的意义,就是用来多线程同步,所以都是全局创建的,可以重复使用,删除的时候一般是进程结束的时候.
退出线程的时候必须保证你已经退出了许可区,否则后面是无法进入许可区的,如果你强制结束了线程,这个许可区你需要手动退出,但依然不能完全避免问题,所以强制结束线程不要用.
线程句柄是一个表,在内核对应了线程的结构体,有了这个句柄你才能操作这个线程,否则不知道你操作的是哪个线程,关闭线程句柄,不代表线程会结束,只是表示你不需要操作这个线程了.不关闭句柄,也就是在你自己的进程里会有存放句柄的内存没有释放,进程结束的时候会自动释放掉.


你许可区只能包含访问临界区资源的代码,不能包含大量代码,进入了就需要快速退出.这需要你代码设计更合理才行,否则就成了单线程了,还要什么多线程.
那么正确的退出线程方法 就是 退出线程()
如果你在里面有申请内存,那退出前需要释放掉(包含一些需要自己删除的对象).

没有关闭线程句柄 那不是线程里考虑的问题,你关闭了线程句柄,你也就不能控制这个线程了.

补充内容 (2021-3-18 13:28):
补充下, 如果能够返回() 退出线程 那就不需要退出线程了. 最好的结束线程办法就是让线程自己执行结束.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

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