【脚本通用模板】app卡屏后,通过多线程“重启”脚本

在文章标题上我给重启两个字加上了引号,因为本期内容讲的并不是直接重启脚本,而是重启多线程中的一个子线程。

在写多线程的时候,我本着一个原则:线程越少越好。这次的话我用了双线程完成想要的功能。

一个主线程和一个子线程:
主线程:循环检测屏幕是否发生变化
子线程:完成脚本要实现的具体功能(脚本干啥用的)

先说一下主线程的思路:

①在屏幕上截取指定区域(范围)的一个截图

②设置你要作为检测卡顿的时间,比如1分钟画面不发生变化,即认为是卡屏了
③通过找图命令在步骤①的范围内找那张截图,如果找到了说明屏幕没变化,也就是卡屏了,反之则认为没有卡屏。

④循环执行上面三步,循环不要太频繁,可以设置多久执行一次。

关于子程序没啥说的,根据自己的脚本内容正常去写就行。

下面根据源码,我们说一下注意的细节。

【脚本通用模板】app卡屏后,通过多线程“重启”脚本

①启动子线程要赋值给一个变量。

dim h=Thread.Start(主程序)

这个是因为停止子线程的时候,你需要明确的告诉脚本,它要停止哪一个在运行的子线程。

Thread.Stop (h)

②同一个函数,如果执行两次启动子线程命令,会有两个线程同时执行。

Thread.Start(主程序)Thread.Start(主程序)

就比如这样,脚本是会有两个主线程同时运行,通常我们可能会认为一个子线程只能有一个在运行,这是一个误区。

③基于上一点的原因,我们重启子线程要先停止正常运行的子线程,然后在开始启动新的线程。这里面有个细节就是我用同一个变量h来存储子线程启动,这样我在写停止线程的时候,就可以统一写成:

Thread.Stop (h)

④启动子线程的时候代码中,子线程名称后面不能有括号

Thread.Start(主程序) //正确写法Thread.Start(主程序())  //错误写法

这种没参数的情况还好说,如果有参数,写法的区别就更加明显了

Thread.Start(主程序(参数1,参数2))  //错误写法Thread.Start(主程序,参数1,参数2)   //正确写法

⑤关于子线程的写法注意事项,在我的代码中叫“主程序”,可以理解为主要的功能程序,本质上说它是一个自定义的函数,对于函数内变量它是局部变量,只在函数内部有效。

很多网友喜欢写大量的自定义函数,本身不能写在子线程内部,只能是调用函数,这里调用的时候一定要注意了,平时调用函数可以写的随意些:

call 函数call 函数()函数函数()

这几种写法都是对的,但是作为子线程内部调用的时候,必须要写上括号。如果需要把返回值复制给变量,不能用call。

原文始发于微信公众号(3分钟学堂):

除特别注明外,本站文章均为原创,转载请注明出处和链接!
本文链接地址: https://pumpkinit.com/1234.html
Pumpkin  [https://pumpkinit.com]  感谢

发表评论

电子邮件地址不会被公开。 必填项已用*标注