B2B网络软件

标题: AIWROK线程许可证工具 [打印本页]

作者: YYPOST群发软件    时间: 1 小时前
标题: AIWROK线程许可证工具
AIWROK线程许可证工具
AIWROK线程许可证工具 B2B网络软件

AIWROK线程许可证工具 B2B网络软件

  1. // AIWROK软件安卓交流QQ群711841924
  2. // 苹果内测软件QQ群648461709

  3. function ThreadLicense() {
  4.     var _isLocked = false;
  5.     var _waitingQueue = [];
  6.    
  7.     /**
  8.      * 获取许可证
  9.      * @param {Function} callback - 获取许可证后的回调函数,接收release作为参数
  10.      * @returns {boolean} 是否成功获取许可证
  11.      */
  12.     this.acquire = function(callback) {
  13.         if (typeof callback !== 'function') {
  14.             return false;
  15.         }
  16.         
  17.         if (!_isLocked) {
  18.             _isLocked = true;
  19.             // 执行回调,并传入release函数
  20.             try {
  21.                 callback(this.release.bind(this));
  22.             } catch (e) {
  23.                 // 出错时自动释放许可证
  24.                 this.release();
  25.                 throw e;
  26.             }
  27.             return true;
  28.         } else {
  29.             // 添加到等待队列
  30.             _waitingQueue.push(callback);
  31.             return false;
  32.         }
  33.     };
  34.    
  35.     /**
  36.      * 释放许可证
  37.      */
  38.     this.release = function() {
  39.         _isLocked = false;
  40.         
  41.         // 处理下一个等待请求
  42.         if (_waitingQueue.length > 0) {
  43.             var nextCallback = _waitingQueue.shift();
  44.             this.acquire(nextCallback);
  45.         }
  46.     };
  47.    
  48.     /**
  49.      * 检查是否被锁定
  50.      * @returns {boolean} 是否已锁定
  51.      */
  52.     this.isLocked = function() {
  53.         return _isLocked;
  54.     };
  55.    
  56.     /**
  57.      * 获取等待队列长度
  58.      * @returns {number} 等待队列长度
  59.      */
  60.     this.getQueueLength = function() {
  61.         return _waitingQueue.length;
  62.     };
  63. }

  64. // 全局许可证实例
  65. var globalLicense = new ThreadLicense();

  66. /**
  67. * 创建许可证实例的便捷方法
  68. * @returns {ThreadLicense} 新的许可证实例
  69. */
  70. function createThreadLicense() {
  71.     return new ThreadLicense();
  72. }

  73. // 简单的延时函数
  74. function delay(ms, callback) {
  75.     if (typeof java !== 'undefined' && java.lang.Thread && java.lang.Thread.sleep) {
  76.         // Rhino环境
  77.         try {
  78.             java.lang.Thread.sleep(ms);
  79.             if (typeof callback === 'function') {
  80.                 callback();
  81.             }
  82.         } catch (e) {}
  83.     } else {
  84.         // 标准环境
  85.         setTimeout(callback, ms);
  86.     }
  87. }

  88. // 简单的打印函数
  89. function safePrintl(msg) {
  90.     if (typeof printl === 'function') {
  91.         printl(msg);
  92.     } else if (typeof console !== 'undefined' && typeof console.log === 'function') {
  93.         console.log(msg);
  94.     }
  95. }

  96. // 简单示例
  97. function licenseExample() {
  98.     safePrintl("线程许可证工具 - 简单示例");
  99.    
  100.     var license = new ThreadLicense();
  101.    
  102.     // 任务1
  103.     license.acquire(function(release) {
  104.         safePrintl("任务1获取到许可证");
  105.         
  106.         // 模拟耗时操作
  107.         delay(2000, function() {
  108.             safePrintl("任务1完成,释放许可证");
  109.             release();
  110.         });
  111.     });
  112.    
  113.     // 任务2会等待任务1完成
  114.     license.acquire(function(release) {
  115.         safePrintl("任务2获取到许可证");
  116.         
  117.         // 模拟耗时操作
  118.         delay(1000, function() {
  119.             safePrintl("任务2完成,释放许可证");
  120.             release();
  121.         });
  122.     });
  123. }

  124. // 执行示例
  125. licenseExample();
复制代码









欢迎光临 B2B网络软件 (http://bbs.niubt.cn/) Powered by Discuz! X3.2