【教程】Autojs脚本实现暂停和超时重启功能的思路和示例代码

转载请注明出处:小锋学长生活大爆炸[xfxuezhang.cn]

背景介绍

        autojs本身不支持暂停脚本,现有网上大部分最直接的做法就是在每条语句后面添加检查是否暂停。当脚本功能和代码量非常打的时候,每一条语句后面都加检测,未免不太现实。

        这里我自己想到了一个极其方便的方法,但可能控制粒度会稍微大一点点,不过其实不影响的。效果示例:

暂停/启动功能

        一般来说,代码都是模块化的,也就是以函数为单位。并且脚本是按照轮询来写的,以面对突发的意外界面。因此,大致框架为:

functiion main() {func1()sleep(xx);func1()sleep(xx);func1()sleep(xx);// ...funcN()sleep(xx);
}function func1() {while(true) {// do something: xxxxx;mysleep(1);if(xxx) {break;}// ...sleep(1);}
}function func2() {// same as func1
}// ...function funcN() {// same as func1
}

        那么,实际上,我们可以改造sleep函数,间接实现暂停功能。改造如:

/**延时函数,可以实现伪暂停、超时重置等功能 */
var prev_pause_flag = null;
var pause_run = false;function mysleep(t) {if(prev_pause_flag==null || prev_pause_flag!=pause_run) {prev_pause_flag = pause_run;log(pause_run?"被暂停了...":"正在运行中...");}while(pause_run) {sleep(500);}sleep(t);
}

        这样,通过把脚本中所有的sleep改为mysleep,并且在需要的时候设置标志位pause_run,就可以实现脚本的暂停和启动了。用法与sleep一模一样,直接平替。

        效果如图:

超时重启功能

        事实上,通过略微改动,还可以实现脚本超时重启功能。一般超时检测是通过看门狗watch dog的机制。原理就是通过定时喂狗来保持运行,当一定时间内没有喂狗,就判定是超时,就可以重启了。

        实现思路是,脚本一般不会在一个地方一直循环很久,如果是的话那很有可能就是卡住了。那么,只需要在调用mysleep时候,额外再判断一下当前执行的是什么功能,如果一定时间(或次数)内都是这个功能,那就判定为超时。参考实现如下:

/**延时函数,可以实现伪暂停、超时重置等功能 */
var prev_pause_flag = null;
var pause_run = false;
var prev_e_type = null;
var e_type_cntout = 0;
// 最大超时次数
var e_type_cntmax= 60; function mysleep(t, e_type) {if(prev_pause_flag==null || prev_pause_flag!=pause_run) {prev_pause_flag  =pause_run;debug(pause_run?"被暂停了...":"正在运行中...");}while(pause_run) {sleep(500);}sleep(t);if(prev_e_type==null || prev_e_type!=e_type) {e_type_cntout  = 0;prev_e_type  = e_type;}e_type_cntout += 1;if(e_type_cntout > e_type_cntmax) {e_type_cntout = 0;debug("超时了");}
}

        其中,e_type随便填,字符串也行。使用实例:

functiion main() {func1()sleep(1);func1()sleep(1);func1()sleep(1);// ...funcN()sleep(1);
}function func1() {while(true) {// do something: xxxxx;mysleep(1);if(xxx) {break;}// ...mysleep(1, "func1");}
}function func2() {// same as func1
}// ...function funcN() {// same as func1
}

        那么,当func1中函数执行太久后,就会触发超时警告了。不过要注意e_type的使用时机!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/224061.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RFID技术在物流仓储解决方案中的应用

行业现状 当前市场竞争日益激烈,提高生产效率、降低运营成本对企业至关重要。仓库和物流管理在各行业中广泛应用。建立完善的仓库管理流程,提高仓库周转率,减少资金占用,实现资产变现,降低仓库淘汰成本,是…

c++面经总结

C基础语法 C和c的区别 c中new和delete是对内存分配的运算符,取代了c中的malloc和free 标准c中的字符串类取代了标准c函数库头文件中的字符数组处理函数(c中没有字符串类型). 在c中,允许有相同的函数名,不过他们的参数类型不能完全相同&…

【状态机FSM 序列检测 饮料机_2023.12.1】

同步状态机 概念 同步状态机(同一脉冲边沿触发):有限个离散状态及某状之间的转移 异步状态机无法综合 分类 Moore状态机 只和状态有关,与输入无关 Mealy状态机 和状态和输入都有关 Mealy型比Moore型少一个状态 结构 由状态寄…

Tomcat从认识安装到详细使用

文章目录 一.什么是Tomact?二.Tomcat的安装1.下载安装包2.一键下载3.打开Tomcat进行测试4.解决Tomcat中文服务器乱码 三.Tomcat基本使用1.启动与关闭Tomcat2.Tomcat部署项目与浏览器访问项目 四.Tomcat操作中的常见问题1.启动Tomcat后,启动窗口一闪而过&#xff1f…

排序 | 冒泡插入希尔选择堆快排归并计数排序

排序 | 冒泡插入希尔选择堆快排归并计数排序 文章目录 排序 | 冒泡插入希尔选择堆快排归并计数排序冒泡排序插入排序希尔排序选择排序堆排序快速排序--交换排序三数取中快速排序hoare版本快速排序挖坑法快速排序前后指针法 快速排序--非递归实现归并排序归并排序非递归实现非比…

【AutoDL】使用云服务器跑深度学习代码

一、AutoDL租用服务器 1.选用服务器 1.算力市场 租用服务器,选择自己心仪的服务器 2.镜像 可以选择一些基础的镜像,社区镜像里是git上有的环境。 3.上传文件 在文件存储中,选择上传的区,在右边点击上传,选择自己的文…

Dockerfile创建镜像LNMP+WordPress

目录 实验部署 nginx 配置mysql 配置php 实验部署 INMPwordpress nginx 172.111.0.10 docker-nginx mysql 172.111.0.20 docker-mysql php 172.111.0.30 docker-php nginx 关闭防火墙和安全机制在opt目录创建nginx MySQL php目录 cd nginx mysql php vim Dockerfile#声…

Arduino中读取SD卡文本文件数据

1、硬件 2、代码 #include <SD.h> #include <SPI.h> // needed for Arduino versions later than 0018const long _1000msTime 1000; // 1000 milli seconds unsigned long _1000msLastTime;File myFile; int date; int Lastdate; String strDate;//…

YOLOv5独家原创改进:SPPF自研创新 | SPPF与感知大内核卷积UniRepLK结合,大kernel+非膨胀卷积提升感受野

💡💡💡本文自研创新改进:SPPF与感知大内核卷积UniRepLK结合,大kernel+非膨胀卷积,使SPPF增加大kernel,提升感受野,最终提升检测精度 收录 YOLOv5原创自研 https://blog.csdn.net/m0_63774211/category_12511931.html 💡💡💡全网独家首发创新(原创),…

垃圾回收 (GC) 在 .NET Core 中是如何工作的?(二)

接上一篇文章垃圾回收 (GC) 在 .NET Core 中是如何工作的&#xff1f;-CSDN博客 GC 会分配堆段&#xff0c;其中每个段都是一系列连续的内存。 置于堆中的对象归类为 3 个代系之一&#xff1a;0、1 或 2。 代系可确定 GC 尝试在应用不再引用的托管对象上释放内存的频率。 编号…

【亚马逊云科技】使用Vscode Amazon-Q完成GUI界面粉笔脚本开发

本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 亚马逊云科技开发者社区, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道 前言 亚马逊云科技-Q&#xff0c;可以快速获得紧迫问题的相关答案&#xff0c;解决问题…

生物信息学分析领域领先的特制语言环境NGLess(Next Generation Less)介绍、安装配置和详细使用方法

介绍 NGLess&#xff08;Next Generation Less&#xff09;是一种用于生物信息学分析的领先的领域特定语言&#xff08;DSL&#xff09;。它旨在简化和加速NGS&#xff08;Next Generation Sequencing&#xff09;数据的分析过程。NGLess具有清晰的语法和功能&#xff0c;使用户…

机器翻译:跨越语言边界的智能大使

导言 机器翻译作为人工智能领域的瑰宝&#xff0c;正在以前所未有的速度和精度&#xff0c;为全球沟通拓展新的可能性。本文将深入研究机器翻译的技术原理、应用场景以及对语言交流未来的影响。 1. 简介 机器翻译是一项致力于通过计算机自动将一种语言的文本翻译成另一种语言的…

[Unity]关于Unity接入Appsflyer并且打点支付

首先需要去官方下载Appsflyer的UnityPackage 链接在这afPackage 然后导入 导入完成 引入此段代码 using AppsFlyerSDK; using System.Collections; using System.Collections.Generic; using UnityEngine;public class AppflysManager : MonoBehaviour {public static App…

测试总监给我分享的《接口自动化测试》总结,让我成功的入门接口自动化门槛......

前两天在测试技术交流群里&#xff0c;听了一位字节跳动的测试总监分享的接口自动化测试的内容&#xff0c;对接口自动化更加了解了&#xff0c;也为自己接下来在公司实施接口自动化项目提供了思路。 前言 自动化测试&#xff0c;算是近几年比较火热的一个话题&#xff0c;当…

现代C++ 实现单例模式

传统写法有什么问题 如果你了解过单例模式&#xff0c;双重检查锁定模式&#xff08;Double-Checked Locking Pattern&#xff0c;后文简称DCLP&#xff09;的写法你一定不会陌生&#xff0c;甚至你或许认为它是最正确的代码。 class Singleton { public://获取单例Singleton…

解决:Component name “index“ should always be multi-word

原因 要求组件名称以驼峰格式命名&#xff0c;自定义组件名称应该由多单纯组成&#xff0c;防止和html标签冲突&#xff0c;所以index.vue 会报错 解决 1、按照规则驼峰格式&#xff0c;如&#xff1a;appIndex.vue 2、若有.eslintrc.js文件&#xff0c;并在规则中(rules)关…

数据挖掘-08-基于Python实现时间序列分析建模(ARIMA 模型)(包括数据和代码)

文章目录 0. 数据代码下载1. 背景描述2. 预测目的3. 数据总览4. 数据预处理4.1数据描述性统计与清洗a. 导入程序库b. 读取数据c. 查看统计信息和空值d. 查看是否有重复数据以及清理重复数据e. 空值清理f. 针对清洗后的数据进行统计分析 5. 探索性数据分析5.1 数据分析 6. 构建 …

猫粮哪个牌子质量好性价比高?盘点十款主食冻干猫粮品牌排行榜!

在过去的100多年里&#xff0c;猫咪主食市场一直被膨化猫粮主导。然而&#xff0c;随着猫咪频频出现猝死、失明、发育不良以及营养不良等问题&#xff0c;猫主人们开始质疑膨化粮是否最适合猫咪。于是&#xff0c;从上世纪90年代开始&#xff0c;出现了生骨肉喂养。生骨肉确实是…

网络安全——基于Snort的入侵检测实验

一、实验目的要求&#xff1a; 二、实验设备与环境&#xff1a; 三、实验原理&#xff1a; 四、实验步骤&#xff1a; 五、实验现象、结果记录及整理&#xff1a; 六、分析讨论与思考题解答&#xff1a; 七、实验截图&#xff1a; 一、实验目的要求&#xff1a; 1、掌握…