【教程】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,一经查实,立即删除!

相关文章

如何一次性scp多个文件到远程机器上

如题,如果想要使用 scp 一次性复制多个文件到远程机器上,可以用以下命令实现,格式如下: $ scp -P port local_file1 local_file2 ... usernameremote_host:remote_path其中: port 是远程主机的指定端口号&#xff0c…

Nginx-nginx 反向代理方式(超详细)

当涉及到提高网站的性能和可用性时,负载均衡和反向代理是非常关键的组件。Nginx是一款高性能的Web服务器和反向代理服务器,它提供了强大的负载均衡功能。下面是关于如何使用Nginx实现反向代理的一些基本步骤: 1.什么是反向代理?&…

Uniapp小程序通过camera组件实现视频拍摄

uni中可以通过调用api的方式去拍摄或者是选择相册的视频&#xff0c;但是在这里我们不采取这种方式&#xff0c;因为调用api的方式&#xff0c;必须跳转&#xff0c;而我们需要在页面中实现&#xff0c;下面看下具体步骤吧... <camera v-if"!srcUrl && showCam…

TypeScript 使用泛型 接收后端的统一返回对象

后端往往在返回数据的时候都会有一个固定的格式&#xff0c;来搭配前端的数据接收工作。 比如&#xff1a; // 返回格式 一 {code:200,message:success,data:{name:勿语,age:18} } // 返回格式 二 {code:200,message:success,data:dawkn23n1io2nkfdawbdkbwfa }从返回结果来看…

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

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

c++面经总结

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

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

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

Tomcat从认识安装到详细使用

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

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

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

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

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

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#声…

VueRouter的编程式导航和导航守卫

编程式导航 Vue Router 提供了编程式导航的方法&#xff0c;这意味着你可以在 JavaScript 中编写代码来导航到不同的路由。这通常在处理用户交互或其他异步操作时很有用。 要实现编程式导航&#xff0c;你可以使用 this.$router.push() 方法。这个方法接受一个路由对象或者一…

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;//…

什么是分布式光伏发电系统?哪些地点适合建设?

随着全球环保意识的提高&#xff0c;光伏发电以发电效率高、环境污染小和能源来源丰富等优势脱颖而出。光伏发电是指利用太阳能辐射直接转变成电能的发电方式&#xff0c;能够有效帮助减少二氧化碳。 分布式光伏发电特指在用户场地附近建设&#xff0c;运行方式以用户侧自发自…

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;解决问题…

如何选择适合自己的API:实用指南

导语&#xff1a;在当今的软件开发世界中&#xff0c;API&#xff08;应用程序接口&#xff09;已成为数据传输和功能调用的重要桥梁。然而&#xff0c;面对众多的API&#xff0c;如何选择适合自己的API成为了一个挑战。本文将为你提供一份实用指南&#xff0c;帮助你选择适合自…

Linux常用长命令总结

1、批量杀死进程 程序意外终止&#xff0c;但进程还在占用资源&#xff0c;如何批量杀死多进程&#xff1f; 可以先使用命令 ps aux 查看所有被启动进程的相同部分&#xff0c;使用grep过滤&#xff0c;然后运行语句&#xff1a; ps -ef | grep train.py | awk {print $2} |…

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

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