YYPOST群发软件 发表于 2025-12-1 09:05:16

AIWROK线程许可证工具

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();



页: [1]
查看完整版本: AIWROK线程许可证工具