开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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


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

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

查看: 164|回复: 9
收起左侧

[已解决] 求一个 信号量 许可证的区别详解

 关闭 [复制链接]
结帖率:100% (16/16)
发表于 昨天 13:10 | 显示全部楼层 |阅读模式   四川省南充市
18精币
最近写了一个程序,多线程+许可证是没问题的,但是我有时候是直接调用,没在线程内,会随机奔溃,例子如下:
临时.png

在线程内调用是没有问题的,但是有时候会手动点击按钮调用一下,就会随机崩溃。

由此有两个问题
1. 许可证是否必须要在线程内使用
2. 如图示,许可证套许可证的形式是否有问题




补充内容 (2025-6-20 13:11):
忘了第三个问题,信号量和许可证的区别

最佳答案

查看完整内容

1. 许可证在UI线程内无效, 或这样说主线程内无效. 所以导致你这些写代码会崩溃. 如果你再主线程内使用的许可证, 易语言默认这个许可证不会阻塞. 2. 许可证套许可证的形式没问题. 3. 区别挺多, 简单来说,信号量能阻塞UI线程, 许可证不能阻塞UI线程 , 一般正常来说, 程序都不要阻塞UI线程, 如果要阻塞, 请重新重新设计代码流程. ...

回答提醒:如果本帖被关闭无法回复,您有更好的答案帮助楼主解决,请发表至 源码区 可获得加分喔。
友情提醒:本版被采纳的主题可在 申请荣誉值 页面申请荣誉值,获得 1点 荣誉值,荣誉值可兑换荣誉会员、终身vip用户组。
快捷通道:申请荣誉值无答案申请取消悬赏投诉有答案未采纳为最佳
结帖率:96% (26/27)

签到天数: 4 天

发表于 昨天 13:10 | 显示全部楼层   广西壮族自治区钦州市
1. 许可证在UI线程内无效, 或这样说主线程内无效. 所以导致你这些写代码会崩溃. 如果你再主线程内使用的许可证, 易语言默认这个许可证不会阻塞.
2. 许可证套许可证的形式没问题.
3. 区别挺多, 简单来说,信号量能阻塞UI线程, 许可证不能阻塞UI线程 , 一般正常来说, 程序都不要阻塞UI线程, 如果要阻塞, 请重新重新设计代码流程.

评分

参与人数 2好评 +1 精币 +2 荣誉 +1 收起 理由
天河宇 + 1 + 2 新技能已get√
笨潴 + 1 热心帮助他人,荣誉+1,希望继续努力(*^__^*) 嘻嘻!

查看全部评分

回复

使用道具 举报

结帖率:0% (0/8)

签到天数: 9 天

发表于 昨天 13:20 | 显示全部楼层   江西省九江市
许可证没必要整个都用,只需要在变量写入的时候用下,你看下哪个变量给赋值了用下就行......不是整个代码都需要用.....
回复

使用道具 举报

结帖率:100% (16/16)

签到天数: 8 天

 楼主| 发表于 昨天 13:27 | 显示全部楼层   四川省南充市
恶魔の佐翼 发表于 2025-6-20 13:20
许可证没必要整个都用,只需要在变量写入的时候用下,你看下哪个变量给赋值了用下就行......不是整个代码都需 ...

我的设计逻辑是这样的,这条程序必须单独跑完了其他线程的程序才能跑,所以就加在程序收尾了,是不是可以用别的方式替代?
回复

使用道具 举报

结帖率:0% (0/8)

签到天数: 9 天

发表于 昨天 13:32 | 显示全部楼层   江西省九江市
天河宇 发表于 2025-6-20 13:27
我的设计逻辑是这样的,这条程序必须单独跑完了其他线程的程序才能跑,所以就加在程序收尾了,是不是可以 ...

你这样还不如不用线程,你这跟直接调用没区别了.............
回复

使用道具 举报

结帖率:100% (16/16)

签到天数: 8 天

 楼主| 发表于 昨天 13:47 | 显示全部楼层   四川省南充市
恶魔の佐翼 发表于 2025-6-20 13:32
你这样还不如不用线程,你这跟直接调用没区别了.............

我的意思是,所有线程都调用了某个子程序,但是A线程的这个子程序必须完整运行一次以后,B线程才能再次调用这个子程序,于是加许可
回复

使用道具 举报

结帖率:0% (0/8)

签到天数: 9 天

发表于 昨天 15:40 | 显示全部楼层   江西省九江市
天河宇 发表于 2025-6-20 13:47
我的意思是,所有线程都调用了某个子程序,但是A线程的这个子程序必须完整运行一次以后,B线程才能再次调 ...

是啊,直接调研的话也是先调用跟后调用啊,主线程只能一个一个调用的,你这加了个许可证整个代码那还不如直接调用来的实在..............
回复

使用道具 举报

结帖率:100% (16/16)

签到天数: 8 天

 楼主| 发表于 昨天 16:23 | 显示全部楼层   四川省南充市
恶魔の佐翼 发表于 2025-6-20 15:40
是啊,直接调研的话也是先调用跟后调用啊,主线程只能一个一个调用的,你这加了个许可证整个代码那还不如直 ...

你要不要再看看我说了什么,每个线程都调用那个子程序C的话,理论上子程序是可以叠加运行的,A线程运行子程序C的同时B线程也在运行子程序C,我需要的是A线程运行子程序C的时候如果B线程也在运行子程序C,那就阻塞,直到A线程的子程序C执行完毕
回复

使用道具 举报

结帖率:100% (16/16)

签到天数: 8 天

 楼主| 发表于 昨天 16:29 | 显示全部楼层   四川省南充市
洋Hay 发表于 2025-6-20 15:49
1. 许可证在UI线程内无效, 或这样说主线程内无效. 所以导致你这些写代码会崩溃. 如果你再主线程内使用的许 ...

说到点子上了,我就是线程里调用子程序,子程序里有许可证,线程调用子程序完全没问题,通过菜单按钮调用子程序就会出现概率崩溃,那么问题就出在主线程使用许可证了,是不是换信号量就可以了?
回复

使用道具 举报

结帖率:96% (26/27)

签到天数: 4 天

发表于 昨天 19:22 | 显示全部楼层   广西壮族自治区钦州市
天河宇 发表于 2025-6-20 16:29
说到点子上了,我就是线程里调用子程序,子程序里有许可证,线程调用子程序完全没问题,通过菜单按钮调用 ...

嗯.换信号量可以,但是不建议在主线程上阻塞, 建议你在主线程上,开一个指定线程改变变量,毕竟有什么bug的产生, 主线程被阻塞,就导致程序没法响应.

补充内容 (2025-6-20 19:27):
就是主线程临时创建一个线程,调用你的子程序.
回复

使用道具 举报

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

本版积分规则 致发广告者

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

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

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