设为首页
收藏本站
只需一步,快速开始
AIWORK版块
AIWORK
Portal
付费问答
AIWORK论坛
BBS
刷新问答
AIWORK
»
AIWORK论坛
›
AIWORK主页
›
AIWORK问答交流
›
AIWROK线程许可证工具
返回列表
发新帖
AIWROK线程许可证工具
QQ896757558
QQ896757558
当前离线
积分
1636
229
主题
191
回帖
1636
积分
管理员
积分
1636
发消息
显示全部楼层
AIWROK线程许可证工具
// AIWROK软件安卓交流QQ群711841924
// 苹果内测软件QQ群648461709
function ThreadLicense() {
var _isLocked = false;
var _waitingQueue = [];
/**
* 获取许可证
* @param {Function} callback - 获取许可证后的回调函数,接收release作为参数
* @returns {boolean} 是否成功获取许可证
*/
this.acquire = function(callback) {
if (typeof callback !== 'function') {
return false;
}
if (!_isLocked) {
_isLocked = true;
// 执行回调,并传入release函数
try {
callback(this.release.bind(this));
} catch (e) {
// 出错时自动释放许可证
this.release();
throw e;
}
return true;
} else {
// 添加到等待队列
_waitingQueue.push(callback);
return false;
}
};
/**
* 释放许可证
*/
this.release = function() {
_isLocked = false;
// 处理下一个等待请求
if (_waitingQueue.length > 0) {
var nextCallback = _waitingQueue.shift();
this.acquire(nextCallback);
}
};
/**
* 检查是否被锁定
* @returns {boolean} 是否已锁定
*/
this.isLocked = function() {
return _isLocked;
};
/**
* 获取等待队列长度
* @returns {number} 等待队列长度
*/
this.getQueueLength = function() {
return _waitingQueue.length;
};
}
// 全局许可证实例
var globalLicense = new ThreadLicense();
/**
* 创建许可证实例的便捷方法
* @returns {ThreadLicense} 新的许可证实例
*/
function createThreadLicense() {
return new ThreadLicense();
}
// 简单的延时函数
function delay(ms, callback) {
if (typeof java !== 'undefined' && java.lang.Thread && java.lang.Thread.sleep) {
// Rhino环境
try {
java.lang.Thread.sleep(ms);
if (typeof callback === 'function') {
callback();
}
} catch (e) {}
} else {
// 标准环境
setTimeout(callback, ms);
}
}
// 简单的打印函数
function safePrintl(msg) {
if (typeof printl === 'function') {
printl(msg);
} else if (typeof console !== 'undefined' && typeof console.log === 'function') {
console.log(msg);
}
}
// 简单示例
function licenseExample() {
safePrintl("线程许可证工具 - 简单示例");
var license = new ThreadLicense();
// 任务1
license.acquire(function(release) {
safePrintl("任务1获取到许可证");
// 模拟耗时操作
delay(2000, function() {
safePrintl("任务1完成,释放许可证");
release();
});
});
// 任务2会等待任务1完成
license.acquire(function(release) {
safePrintl("任务2获取到许可证");
// 模拟耗时操作
delay(1000, function() {
safePrintl("任务2完成,释放许可证");
release();
});
});
}
// 执行示例
licenseExample();
复制代码
function
许可证
quot
callback
if
相关帖子
2025-10-29
苹果系统专用H5创建一个绿色文件
2025-10-31
AIWROK软件用图找图示例templateMat方法
2025-11-5
AIWROK软件图像二值化的各种方法和应用场景
2025-11-10
AIWROK软件无障碍触摸操作示例:点击、左右滑动、上下滑动实例
2025-11-19
AIWROK软件日志悬浮窗简化版自动切换位置
2025-11-20
AIWROK数组方法高级应用案例
2025-11-24
AWIROK软件多选[uiCheckBox]方法小结
2025-11-28
整理了AIWROK环境下常用的Date对象和sleep对象方法
2025-12-5
AIWROK软件file文件操作方法小结
上一篇:
aiwork如何连接操作MySQL
下一篇:
AIWROK截图缓存工具
发表于
7 天前
举报
回复
分享
返回列表
发新帖
本版积分规则
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
浏览过的版块
AIWORK技术交流
黑夜模式
快速发帖
返回列表
返回顶部