精易论坛

标题: 用了那么久的许可证 昨晚才发现... [打印本页]

作者: 笨来无一悟    时间: 2024-6-23 08:42
标题: 用了那么久的许可证 昨晚才发现...
用了那么久的许可证 昨晚才发现 进入许可区之后 中途返回了 没有调用到退出许可区 下次竟然还能进入之前都是返回的之前退出一下 线程执行到返回 会自动退出许可区吗
  
子程序名返回值类型公开备 注
子程序  
进入许可区 (许可证)
如果真 (条件)
' 这儿没有退出许可区 直接返回了 下次还能重新进入许可区 难道返回的时候会自动调用退出许可区???这么有用的知识 你们为什么不早点告诉我
返回 ()
退出许可区 (许可证)


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

作者: 凌哥    时间: 2024-6-23 08:51
同一条线程可以重复进入,也要重复退出,不然会死锁
作者: 小情缘    时间: 2024-6-23 08:52
不能进入


.版本 2
.支持库 EThread
.支持库 spec

.程序集 窗口程序集_启动窗口
.程序集变量 许可证, 整数型

.子程序 __启动窗口_创建完毕

许可证 = 创建进入许可证 ()
.计次循环首 (10, )
    启动线程 (&子程序, , )
.计次循环尾 ()
程序_延时 (1000, )
调试输出 (“并发完成”)

.子程序 子程序

进入许可区 (许可证)
.如果真 (真)
    调试输出 (“我进入了”)
    ' 这儿没有退出许可区 直接返回了 下次还能重新进入许可区 难道返回的时候会自动调用退出许可区???这么有用的知识 你们为什么不早点告诉我
    返回 ()
.如果真结束
退出许可区 (许可证)



你自己试试  
我的输出
* “我进入了”
* “并发完成”
被调试易程序运行完毕
作者: Suky    时间: 2024-6-23 08:54
本帖最后由 Suky 于 2024-6-23 08:57 编辑

返回前没退出    后面的就全部都锁死了哟
进入许可区    只是进入目标许可证的队列里排队    而不是真的进入到可操作状态了
如果许可证被占用   一定要等到  退出许可区   被调用   释放了许可证     后面进入许可区的才能按照队列被允许操作许可区内的组件或代码


作者: 用户被删除    时间: 2024-6-23 09:04
并不会 会无法进入
作者: 笨来无一悟    时间: 2024-6-23 09:12
用户被删除 发表于 2024-6-23 09:04
并不会 会无法进入

一时疏忽 返回之前没有退出 发现竟然还能再次进入 惊呆

真的重新进去了.png (33.53 KB, 下载次数: 0)

真的重新进去了.png

作者: only3880    时间: 2024-6-23 09:49
除非你这个许可证书是空的,不然不可能不退出,还能重复进入
作者: 笨来无一悟    时间: 2024-6-23 09:55
only3880 发表于 2024-6-23 09:49
除非你这个许可证书是空的,不然不可能不退出,还能重复进入

窗口组件产生的组件事件 里面没有退出 直接返回 下次又进去了

所以我才觉得奇了怪了.png (23.6 KB, 下载次数: 0)

所以我才觉得奇了怪了.png

作者: 小白子    时间: 2024-6-23 10:12
笨来无一悟 发表于 2024-6-23 09:12
一时疏忽 返回之前没有退出 发现竟然还能再次进入 惊呆

组件事件本来就是单线程,在这里不应该使用许可证
许可证是按照线程来管理的,再A线程中进入许可区后,下次还在A线程还是可以进入许可区,因为两个线程环境是一样
作者: wlp    时间: 2024-6-23 10:47
本帖最后由 wlp 于 2024-6-23 11:42 编辑
  
窗口程序集名保 留  保 留备 注
自动退出许可证类   
变量名类 型数组备 注
集__许可证整数型  
集__需要退出逻辑型  

子程序名返回值类型公开备 注
_初始化 当基于本类的对象被创建后,此方法会被自动调用

子程序名返回值类型公开备 注
_销毁 当基于本类的对象被销毁前,此方法会被自动调用
如果真 (集__需要退出)
退出许可证 (集__许可证)

子程序名返回值类型公开备 注
进入 
参数名类 型参考可空数组备 注
许可证整数型
进入许可证 (许可证)
集__许可证 = 许可证
集__需要退出 = 真
子程序名返回值类型公开备 注
退出 
如果真 (集__需要退出)
退出许可证 (集__许可证)
集__需要退出 = 假

子程序名返回值类型公开备 注
重入 
如果真 (集__需要退出=)
进入 (集__许可证)


  
窗口程序集名保 留  保 留备 注
窗口程序集_启动窗口   
子程序名返回值类型公开备 注
__启动窗口_创建完毕  

子程序名返回值类型公开备 注
子程序1  
变量名类 型静态数组备 注
自动退出许可证自动退出许可证类 
自动退出许可证.进入 (全局许可证)
如果真 (xxx)
返回 ()

自动退出许可证.退出 ()
' 这里执行其他代码
自动退出许可证.重入 ()
返回 ()


作者: 7ian    时间: 2024-6-23 12:40
如果这还能用,那许可证一点用都没
作者: lingxiyang    时间: 2024-6-23 13:12
许可区是什么
作者: qck易语言    时间: 2024-6-23 13:57
wlp 发表于 2024-6-23 10:47
[e=0].版本 2

.程序集 自动退出许可证类

利用局部变量自动销毁,自动退出许可,你长期这么用的吗,下次试试
作者: 灵感吖    时间: 2024-6-23 14:58
lingxiyang 发表于 2024-6-23 13:12
许可区是什么

就是多线程中,只有拿到许可证的线程才能执行代码,执行完这段代码后,退出许可区,其他线程才能执行这个代码,简单来说,就是一堆人去抢一个钥匙进房间,只有抢到钥匙的人,才能进入房间,这个人出来把钥匙放回去,其他人才能继续抢钥匙进入房间,在易语言中一般用于操作全局变量,操作组件,因为多线程操作组件会引起崩溃
作者: xiaole283    时间: 2024-6-27 16:55
同一线程下可以重复进入。许可有进入次数记录的,进入计次就要退出几次,否则其他线程无法进入。




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4