注册 登录
发贴工具
查看: 29|回复: 0
打印 上一主题 下一主题

[24小时收录超级好的网站] AIWROK软件多线程thread1.runJsFile例子

[复制链接]

2265

主题

2313

帖子

1万

积分

积分
13794
跳转到指定楼层
楼主
  1. 以下是代码的详细说明:
  2. 初始化
    • var T = time.nowStamp();:记录系统启动的时间戳。
    • var MAX_WORKERS = 4;:定义最大工作线程数为4。
    • var TASK_QUEUE = [];:任务队列,用于存储待执行的任务。
    • var isRunning = true;:系统运行标志,当为true时,系统持续运行。
  1. 定义工作任务
    • function createTask(taskId):定义一个函数来创建任务对象。
    • id: taskId:任务ID。
    • status: "pending":任务状态,初始为"pending"(待执行)。
    • startTime: 0:任务开始时间,初始为0。
    • endTime: 0:任务结束时间,初始为0。
  1. 工作线程执行函数
    • function workerFunction(workerId):定义一个工作线程的执行函数。
    • while (isRunning):当系统正在运行时,工作线程持续寻找任务。
    • var task = TASK_QUEUE.find(t => t.status === "pending");:从任务队列中找到状态为"pending"的任务。
    • if (task):如果找到待执行的任务。
    • task.status = "running";:将任务状态更改为"running"(正在执行)。
    • task.startTime = time.nowStamp();:记录任务开始时间。
    • printl([{task.id});:打印工作线程开始执行任务的信息。
    • try:尝试执行任务。
    • load("截图.js");:加载并执行"截图.js"脚本,用于执行具体的任务逻辑。
    • task.status = "completed";:任务执行成功后,将状态更改为"completed"(已完成)。
    • printl([{task.id} 完成);:打印工作线程完成任务的信息。
    • catch (e):如果任务执行过程中发生错误。
    • task.status = "failed";:将任务状态更改为"failed"(失败)。
    • printl([{task.id} 失败: ${e});:打印工作线程任务失败的信息及错误原因。
    • finally:无论任务成功或失败。
    • task.endTime = time.nowStamp();:记录任务结束时间。
    • sleep.millisecond(100);:如果没有待执行的任务,工作线程休眠100毫秒后再次检查。
  1. 初始化线程池
    • function initThreadPool():定义一个函数来初始化线程池。
    • for (var i = 0; i < MAX_WORKERS; i++):根据MAX_WORKERS的数量创建相应数量的工作线程。
    • var worker = new thread();:创建一个新线程。
    • worker.runJsFile("截图.js", "worker-" + (i + 1));:让新线程运行"截图.js"脚本,传入线程ID作为参数。
    • printl(已创建 ${MAX_WORKERS} 个工作线程);:打印已创建的工作线程数量信息。
  1. 状态监控
    • function monitor():定义一个状态监控函数。
    • while (isRunning):当系统正在运行时,持续监控任务进度。
    • var completed = TASK_QUEUE.filter(t => t.status === "completed").length;:统计已完成的任务数量。
    • printl(任务进度: {TASK_QUEUE.length});:打印当前任务进度信息。
    • if (time.nowStamp() - T > 10000):如果系统运行时间超过10秒。
    • isRunning = false;:将系统运行标志设为false,停止系统运行。
    • printl("监控结束");:打印监控结束的信息。
    • break;:退出循环。
    • sleep.millisecond(2000);:监控线程每2秒检查一次任务进度。
  1. 主程序执行
    • 添加任务:使用for循环添加10个任务到任务队列。
    • 启动系统:调用initThreadPool()函数初始化线程池,启动工作线程。
    • 启动监控线程:创建一个新的线程用于监控,并运行"截图.js"脚本,传入"monitor"作为参数。
    • 主线程执行监控:调用monitor()函数进行监控。
// ======================
// 兼容版线程控制示例
// ======================

// 初始化
var T = time.nowStamp(); // 记录系统启动的时间戳
var MAX_WORKERS = 4; // 定义最大工作线程数为4
var TASK_QUEUE = []; // 任务队列,用于存储待执行的任务
var isRunning = true; // 系统运行标志,当为true时,系统持续运行

// 1. 定义工作任务
function createTask(taskId) {
return {
id: taskId, // 任务ID
status: "pending", // 任务状态,初始为"pending"(待执行)
startTime: 0, // 任务开始时间,初始为0
endTime: 0 // 任务结束时间,初始为0
};
}

// 2. 工作线程执行函数
function workerFunction(workerId) {
while (isRunning) { // 当系统正在运行时,工作线程持续寻找任务
var task = TASK_QUEUE.find(t => t.status === "pending");
if (task) { // 找到待执行的任务
task.status = "running"; // 将任务状态更改为"running"(正在执行)
task.startTime = time.nowStamp(); // 记录任务开始时间
printl(`[${workerId}] 开始执行任务 ${task.id}`); // 打印工作线程开始执行任务的信息
try {
// 直接执行截图脚本
load("截图.js"); // 加载并执行"截图.js"脚本,用于执行具体的任务逻辑
task.status = "completed"; // 任务执行成功后,将状态更改为"completed"(已完成)
printl(`[${workerId}] 任务 ${task.id} 完成`); // 打印工作线程完成任务的信息
} catch (e) {
task.status = "failed"; // 如果任务执行过程中发生错误,将状态更改为"failed"(失败)
printl(`[${workerId}] 任务 ${task.id} 失败: ${e}`); // 打印工作线程任务失败的信息及错误原因
} finally {
task.endTime = time.nowStamp(); // 无论任务成功或失败,记录任务结束时间
}
}
sleep.millisecond(100); // 如果没有待执行的任务,工作线程休眠100毫秒后再次检查
}
}

// 3. 初始化线程池
function initThreadPool() {
for (var i = 0; i < MAX_WORKERS; i++) { // 根据MAX_WORKERS的数量创建相应数量的工作线程
var worker = new thread(); // 创建一个新线程
worker.runJsFile("截图.js", "worker-" + (i + 1)); // 让新线程运行"截图.js"脚本,传入线程ID作为参数
}
printl(`已创建 ${MAX_WORKERS} 个工作线程`); // 打印已创建的工作线程数量信息
}

// 4. 状态监控
function monitor() {
while (isRunning) { // 当系统正在运行时,持续监控任务进度
var completed = TASK_QUEUE.filter(t => t.status === "completed").length; // 统计已完成的任务数量
printl(`任务进度: ${completed}/${TASK_QUEUE.length}`); // 打印当前任务进度信息

if (time.nowStamp() - T > 10000) { // 如果系统运行时间超过10秒
isRunning = false; // 将系统运行标志设为false,停止系统运行
printl("监控结束"); // 打印监控结束的信息
break; // 退出循环
}
sleep.millisecond(2000); // 监控线程每2秒检查一次任务进度
}
}

// ======================
// 主程序执行
// ======================

// 添加任务
for (var i = 1; i <= 10; i++) { // 添加10个任务到任务队列
TASK_QUEUE.push(createTask("task-" + i)); // 调用createTask函数创建任务,并将其添加到TASK_QUEUE中
}

// 启动系统
initThreadPool(); // 初始化线程池,启动工作线程

// 启动监控线程
var monitorThread = new thread(); // 创建一个新的线程,用于监控
monitorThread.runJsFile("截图.js", "monitor"); // 让监控线程运行"截图.js"脚本,传入"monitor"作为参数

// 主线程执行监控
monitor(); // 主线程也运行监控函数,监控任务进度

printl("系统运行结束"); // 打印系统运行结束的信息

这段代码的主要功能是启动两个独立的JavaScript线程,并监控它们的运行状态。10秒后,代码会停止其中一个线程。下面是对代码的详细解释:

  1. T = time.nowStamp();:获取当前的时间戳,并将其赋值给变量T。这个时间戳用于后续计算程序已经运行的时间。
  2. 创建两个线程对象:var thread1 = new thread(); var thread2 = new thread();。这里创建了两个线程实例,分别命名为thread1thread2
  3. 启动线程:
    • thread1.runJsFile('线程1.js', 'worker1');:启动thread1,并运行名为线程1.js的JavaScript文件。同时,为这个线程指定一个名字worker1
    • thread2.runJsFile('线程2.js', 'worker2');:启动thread2,并运行名为线程2.js的JavaScript文件。同时,为这个线程指定一个名字worker2
  1. 进入一个无限循环while (true),在此循环中:
    • printl("正常运行");:打印字符串"正常运行"到控制台,用于检查程序是否在正常运行。
    • sleep.millisecond(1000);:让当前线程休眠1000毫秒(即1秒),暂停执行后续代码以避免短时间内频繁打印,提高程序的可读性。
    • if (time.nowStamp() - T > 10000):计算当前时间与T所记录的时间之间的差值,判断是否已经过去了10000毫秒(即10秒)。如果是,则执行thread1.stop();,即停止thread1线程。
    • break;:退出无限循环,结束监控。
T = time.nowStamp();

// 正确启动两个线程(线程名必须不同!)
var thread1 = new thread(); // 线程对象1
var thread2 = new thread(); // 线程对象2
thread1.runJsFile('线程1.js', 'worker1'); // 线程名用"worker1"
thread2.runJsFile('线程2.js', 'worker2'); // 线程名用"worker2"

// 监控循环(10秒后停止线程1)
while (true) {
printl("正常运行");
sleep.millisecond(1000);

if (time.nowStamp() - T > 10000) {
thread1.stop(); // 停止线程1(通过对象实例)
break; // 退出监控循环
}
}
AIWROK软件多线程thread1.runJsFile例子 群发软件发帖工具 AIWROK软件多线程thread1.runJsFile例子 群发软件发帖工具


untoAIWROK软件Java标准库和Android SDK库nextAIWROK软件常用数组方法小结汇集方法

3.jpg (313.23 KB, 下载次数: 2)

3.jpg
回复

使用道具 举报

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

本版积分规则

相关导读了
    采集亚马逊正版群发工具有没有?
    Apr.20旅行X心语今天来说说YYPOST新功能的一个灵活用法,采集亚马逊商品信息,并且获得排名的软件,亚马逊现在越来越多客户做,淘宝的水是越来越清了,以前做电商的客户,现在都转战到外国,最赚钱的要数一些客户往亚马逊里堆了吧,拿我这个YYPOST的客户,最多的是采集,分析排名,刷价格,刷数量,改价,刷访问量等等技术

    企业发展B2B网站有什么东东软件可以发呢
    标题企业发展网B2B软件,现在虽然B2B网站收录不错,可愁的是心急的人们,他们太想一口吃撑胖子了,发帖宣传虽然不能像佛系那样淡定,但也不能像跑火车那般急躁对待,自己内容不收录,完全是自己操作内容问题,可以参考一下别人的内容是怎么弄的,然后自己要试着转变,而且收录这个内容,常常会变化的,不是一种规则就吃到老

    搜房天下房聊软件哪一个好呢
    本帖最后由 发帖软件 于 2019-5-22 16:15 编辑 2搜房天下群发房聊信息软件,开始本来打算做58同城的,但发一个就要一次点触验证码,这就让人没有感觉到存在的价值了吧,都是卖二手房和新房的搜房天下倒是可以发即时聊天信息,也没有发现他这个网站有啥子限制,登陆一个搜房天下账号,然后采集回来分类列表的网址,然后就一

    大家坛有没有好用的群发工具下载呢
    当你的笑容给我礼貌的招呼,大家坛全自动发帖软件,宣传推广是一场持久战,总是有一些人把软件用了一天,或是几个小时,就觉得自己付出太多了,那加进来的粉丝,或是流量,应该是和宣传多少成正比的,其实没有这么便宜的事,就像很多阅读量超过一百万的视频,或是电影,真正会在屏幕打赏的人不会超过三千,真正大额打赏给主

    群发正版软件中国塑料网
    中国塑料网群发软件YYPOST脚本下载地址,这个网站会有一个很奇怪的问题就是你在首页登陆无半个验证码,但在登陆网址登陆就会有一个验证码,所以我们灵活一些,在首页登陆就不用输入验证码了哈。网站秒收录比较高,但发的都是五金和建筑行业,先前有很多人都是发土建工程的大公司操作的,现在这个网站专为那个行业诞生的吧。

    OpenStreetMap网站正版2019年发帖工具下载
    本帖最后由 发帖软件 于 2019-5-21 11:13 编辑 OpenStreetMap网站全自动群发,OpenStreetMapOpenStreetMap(简称OSM,中文是公开地图)是一个网上地图协作计划,目标是创造一个内容自由且能让所有人编辑的世界地图。有的人编辑地图然后等收录,有的人发日志等收录,我们这里也是利用地图日志做为宣传的目标,简单的脚本理

    搜房天下全自动收短信全自动识别验证码注册账号软件
    房天下自动注册机,这个脚本是前几天发房聊的脚本廷伸品种,这个脚本能做到自动注册账号,自动保存账号,自动发房聊的效果,不过今天我们主要说一说怎么注册账号写脚本吧,这个搜房天天下的账号,可以发提问,可以发房聊,发论坛,发博客,还有发个人中心页都是有秒收的效果的,这样就省去了去买号,去乱花钱的效果了吧,而

    企业邮箱安卓端有什么APP软件可以发的呢
    请输入标题企业邮箱安卓发发送邮箱脚本,这个脚本是利用企业邮箱进行群发的,全程是一种模拟手工操作的过程,所以封号是很少的,而且企业邮箱群发到普通QQ邮箱不容易进垃圾箱中的,所以这个脚本也是这样的原理,不过最好是利用一些多开器,登陆多点的QQ邮箱账号会比较流畅一些,然后用软件一个一个的切换APP进行群发邮件会

    头条留评论软件有没有好用的呢?
    今天整一个今日头条留言软件,对于留言YYPOST是优势是比较大的存在,因为他往往专注一些下拉定位的优点,像今日头条这样,还是需要一些特殊下拉定位的,因为他新闻有长有短,有图有视频的,所以综合起来定位是比较难的,如果用POST也不是很轻松可以破解他的加密参数。这个脚本也是有一个不好的地方就是换号会比较麻烦,您电

    单网页生成神器
    最近新技术,网页生成机占领了整个网络的半壁江山,效果很疯狂,虽然不知道能持续多久,作为开发软件的领头者,一直在找收录的方法,一直在努力创新着,一直被人模仿,却从没有被超越过,这个网页生成机,已经出来有一段时间了,一直没有拿出来分享,醉过醉过,它是利用的一些小小收录漏洞整的,您最好用一些老站域名,进行

关闭
快速回复 返回列表 返回顶部
本站自动发贴软件,是现在最流行的做脚本软件,这种发贴工具,不但发贴收录快,而且抢占好的先机,完全自由编辑,实现针对性群发模拟操作,软件可以顶贴,也可以发贴,可以兼容支持Discuz、PHPWind、Dvbbs三大主流论坛,有手机验证码收件,邮件收发的功能,支持验证码识别,注册问题识别,多线程任务,自动上传头像,自动激活注册邮件,兼容防注册插件,本站软件原创正版,更新效率最快的原创软件。 『网络推广软件』『自动发帖软件』『 自动发帖