手机按键中控运行思路的个人理解


目前而言基本的自己理解的中控多线程脚本无非就是两种

1.主代码作为脚本功能的载体 另外开辟一个线程作为和中控保持联系的部分(下面只是思路 无法直接运行)

Import "zm.luae"
zm.Init /*
该思路下的基本流程 
从UI界面获取到云账号 和 本地的配置信息---->根据自己的情况决定是上传当前配置到云端还是直接从云端读取配置信息---->
开始脚本的运行  脚本的主代码负责脚本的主要功能 脚本开启一个单独的多线程来负责与中控的交互---->通过多线程  我们把主代码里面、
的当前脚本运行状态 比如正在签到 正在切换账号等状态上传到中控 然后从中控端下载 中控的运行指令和对应的配置信息---->
通过 多线程的共享变量 主代码活得了中控的运行指令和云配置的内容 然后根据这2个信息来决定如何运行
*///随便定义了一些常见的变量 变量内容没有任何意义
Dim intX,intY,结果,arr,brr,线程状态
Dim 找图_账号登陆界面=array(22,57,526,318,"Attachment:手机按键图标.png","101010",0,0.8,100,"手机按键图标")
Dim 找图_登陆成功界面()=array(22,57,526,318,"Attachment:手机按键图标.png","101010",0,0.8,100,"手机按键图标")
Dim 找图_签到界面=array(22,57,526,318,"Attachment:手机按键图标.png","101010",0,0.8,100,"手机按键图标")
Dim 找图_签到完成界面=array(22,57,526,318,"Attachment:手机按键图标.png","101010",0,0.8,100,"手机按键图标")Dim 线程id=Thread.Start(多线程_中控交互)//开启多线程来负责和中控交互信息
Thread.SetShareVar "中控运行指令","开启"//这个多线程共享变量是用来控制整个脚本的开启关闭的一个开关变量 需要从中控
//获取运行指令 来决定脚本的功能的开启和关闭  默认值为 开启 可能是值为开启 和 关闭
Thread.SetShareVar "脚本状态","运行中" //这个多线程共享变量 是负责把主线程里面脚本运行到哪里了写入进入 
//比如运行到了登陆操作了 就把这个多线程共享变量改为 登陆 二字  其他操作也是如此
Thread.SetShareVar "云配置","" //这个是用来从中控那边获取当前脚本对应的云配置内容的 多线程共享变量 按理说说默认值为本地配置构成的json字符串 //主代码 简单描述下常见脚本操作
Do//每次循环前 先看看多线程是否还在 不再则开启下 避免出现一些意外情况线程状态 = ""线程状态 = zm.ThreadStatus(线程id)If 线程状态 = "pending " Then //未启动    线程id=Thread.Start(多线程_中控交互)ElseIf 线程状态 = "running" Then//正在运行 这个正常 可以不用任何操作ElseIf 线程状态 = "done" Then线程id = Thread.Start(多线程_中控交互)ElseIf 线程状态 = "waiting" Then//等待不可能出现这个情况 因为我代码里面根本没有任何等待线程的命令 线程id = Thread.Start(多线程_中控交互)ElseIf 线程状态 = "cancelled" Then//被强制终止了线程id = Thread.Start(多线程_中控交互)ElseIf 线程状态 = "error" Then//出错了Thread.Stop 线程id//停止该线程 然后重启线程Delay 2000线程id = Thread.Start(多线程_中控交互)        End If//判断下中控那边的运行指令 是否要停止正常的功能结果 = ""结果 = Thread.GetShareVar("中控运行指令")If 结果 = "开启" Then Call 切换账号()Call 登陆()Call 签到和领取礼物()ElseIf 结果 = "关闭" ThenDelay 20000 //等待20秒 然后再次检测中控发过来的指令        
    End IfDelay 1000
Loop//多线程函数 这个多线程负责和中控定时交流信息 把脚本的运行情况实时汇总给中控 
//然后从中控那边接收一些数据和控制命令 比如
Sub 多线程_中控交互()DoCall 中控交互()  //这个函数负责连接中控 把本地的脚本运行状态和其他必要的信息上传给中控 然后接收中控给予的运行指令和当前设备对应的配置项内容等东西    Delay 10000LoopEnd Sub//这个函数负责连接中控 把本地的脚本运行状态和其他必要的信息上传给中控 然后接收中控给予的运行指令和当前设备对应的配置项内容等东西        
Function 中控交互()//连接中控接口  无非是利用紫猫的netdata实现上传脚本状态 和下载当前设备对应的配置内容和 运行指令////先把本地设备的脚本状态等信息上传到中控 状态信息自然是通过多线程共享变量 Thread.GetShareVar "脚本状态" 来获取zm.NetDataSet 当前设备的云账号,Thread.GetShareVar "脚本状态","云状态表"////从中控接口获取当前设备的脚本对应的配置项内容 和 中控对脚本的运行指令 是开启还是关闭 这里还可以扩展 比如是否定时启动等其他的Thread.SetShareVar "中控运行指令",从中控获取到的运行指令Thread.SetShareVar "云配置",从中控获取到的云配置信息End Function
Function 切换账号()//把 多线程共享变量的 脚本状态改为 切换账号Thread.SetShareVar "脚本状态","切换账号中"//主要切换账号操作
    
End Function
Function 登陆()//把 多线程共享变量的 脚本状态改为 切换账号Thread.SetShareVar "脚本状态","登陆中"//主要登陆操作
    
End Function
Function 签到和领取礼物()//把 多线程共享变量的 脚本状态改为 切换账号Thread.SetShareVar "脚本状态","签到和领取礼物中"//主要签到和领取礼物操作
    
End Function

2.主代码作为和中控保持联系的载体 另外开辟一个线程作为脚本功能的载体

Import "zm.luae"
zm.Init /*
该思路下的基本流程 
从UI界面获取到云账号 和 本地的配置信息---->根据自己的情况决定是上传当前配置到云端还是直接从云端读取配置信息---->
开始脚本的运行  脚本的主代码与中控交互 多线程只是f负责运行主功能 把脚本当前运行状态上传 下载对应的云配置信息和中控运行指令 放到多线程共享变量里面
(其实不用放到这里 因为多线程只负责主功能 不需要读取共享变量来做应对了)--->根据从中控获取到的2个数据  多线程通过thread.start 和thread.stop
来控制实现主功能的多线程的开关 这个思路比第一个思路要简单太多 但是会涉及到手机按键多线程和主线程 对于主线程中变量和函数的处理机制
*///随便定义了一些常见的变量 变量内容没有任何意义
Dim intX,intY,结果,arr,brr,线程状态
Dim 找图_账号登陆界面=array(22,57,526,318,"Attachment:手机按键图标.png","101010",0,0.8,100,"手机按键图标")
Dim 找图_登陆成功界面()=array(22,57,526,318,"Attachment:手机按键图标.png","101010",0,0.8,100,"手机按键图标")
Dim 找图_签到界面=array(22,57,526,318,"Attachment:手机按键图标.png","101010",0,0.8,100,"手机按键图标")
Dim 找图_签到完成界面=array(22,57,526,318,"Attachment:手机按键图标.png","101010",0,0.8,100,"手机按键图标")Dim 线程id=Thread.Start(多线程_脚本主功能)//开启多线程 该多线程是用来负责脚本的正常功能
Thread.SetShareVar "中控运行指令","开启"//这个多线程共享变量是用来控制整个脚本的开启关闭的一个开关变量 需要从中控
//获取运行指令 来决定脚本的功能的开启和关闭  默认值为 开启 可能是值为开启 和 关闭
Thread.SetShareVar "脚本状态","运行中" //这个多线程共享变量 是负责把主线程里面脚本运行到哪里了写入进入 
//比如运行到了登陆操作了 就把这个多线程共享变量改为 登陆 二字  其他操作也是如此
Thread.SetShareVar "云配置","" //这个是用来从中控那边获取当前脚本对应的云配置内容的 多线程共享变量 按理说说默认值为本地配置构成的json字符串 //主代码 主要负责和中控的交互
Do//和中控交互 上传和下载必要的东西 然后把得到的信息写入到多线程的共享变量里面 等待后续的处理使用
    Call 中控交互()//判断下中控那边的运行指令 是否要停止正常的功能结果 = ""结果 = Thread.GetShareVar("中控运行指令")If 结果 = "开启" Then //先看看多线程是否还在 不再则开启下 避免出现一些意外情况线程状态 = ""线程状态 = zm.ThreadStatus(线程id)If 线程状态 = "pending " Then //未启动    线程id=Thread.Start(多线程_脚本主功能)ElseIf 线程状态 = "running" Then//正在运行 这个正常 可以不用任何操作ElseIf 线程状态 = "done" Then线程id = Thread.Start(多线程_脚本主功能)ElseIf 线程状态 = "waiting" Then//等待不可能出现这个情况 因为我代码里面根本没有任何等待线程的命令 线程id = Thread.Start(多线程_脚本主功能)ElseIf 线程状态 = "cancelled" Then//被强制终止了线程id = Thread.Start(多线程_脚本主功能)ElseIf 线程状态 = "error" Then//出错了Thread.Stop 线程id//停止该线程 然后重启线程Delay 2000线程id = Thread.Start(多线程_脚本主功能)        End IfElseIf 结果 = "关闭" ThenThread.Stop 线程idDelay 20000 //等待20秒 然后再次检测中控发过来的指令        
    End IfDelay 10000
Loop//多线程函数 这个多线程负责脚本主功能
Sub 多线程_脚本主功能()//因为手机按键多线程的特点 要在多线程内部拥有真正的全局变量 需要在主代码声明该变量 然后再多线程内赋值 这样才可以找图_账号登陆界面=array(22,57,526,318,"Attachment:手机按键图标.png","101010",0,0.8,100,"手机按键图标")找图_登陆成功界面()=array(22,57,526,318,"Attachment:手机按键图标.png","101010",0,0.8,100,"手机按键图标")找图_签到界面=array(22,57,526,318,"Attachment:手机按键图标.png","101010",0,0.8,100,"手机按键图标")找图_签到完成界面=array(22,57,526,318,"Attachment:手机按键图标.png","101010",0,0.8,100,"手机按键图标")DoCall 切换账号()Call 登陆()Call 签到和领取礼物()Delay 1000LoopEnd Sub//这个函数负责连接中控 把本地的脚本运行状态和其他必要的信息上传给中控 然后接收中控给予的运行指令和当前设备对应的配置项内容等东西        
Function 中控交互()//连接中控接口  无非是利用紫猫的netdata实现上传脚本状态 和下载当前设备对应的配置内容和 运行指令////先把本地设备的脚本状态等信息上传到中控 状态信息自然是通过多线程共享变量 Thread.GetShareVar "脚本状态" 来获取zm.NetDataSet 当前设备的云账号,Thread.GetShareVar "脚本状态","云状态表"////从中控接口获取当前设备的脚本对应的配置项内容 和 中控对脚本的运行指令 是开启还是关闭 这里还可以扩展 比如是否定时启动等其他的Thread.SetShareVar "中控运行指令",从中控获取到的运行指令Thread.SetShareVar "云配置",从中控获取到的云配置信息End Function
Function 切换账号()//把 多线程共享变量的 脚本状态改为 切换账号Thread.SetShareVar "脚本状态","切换账号中"//主要切换账号操作
    
End Function
Function 登陆()//把 多线程共享变量的 脚本状态改为 切换账号Thread.SetShareVar "脚本状态","登陆中"//主要登陆操作
    
End Function
Function 签到和领取礼物()//把 多线程共享变量的 脚本状态改为 切换账号Thread.SetShareVar "脚本状态","签到和领取礼物中"//主要签到和领取礼物操作
    
End Function



这两种各有各的好处

个人倾向第二种 结构更加清晰 但是需要注意 多线程内的全局变量的声明和赋值方法

转载于:https://www.cnblogs.com/zjl8455482/p/10349322.html

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

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

相关文章

burp过期了,换一个

先从吾爱破解论坛下载工具:https://down.52pojie.cn/Tools/Network_Analyzer/Burp_Suite_Pro_v1.7.37_Loader_Keygen.zip 工具运行需要Java环境,请自行安装,此处不赘述。解压完后双击keygen 填一下License Text(随意),然后点击Run…

加载一张图片到ImageView到底占据多少内存

https://blog.csdn.net/BUG_delete/article/details/79557939 简介 Android中经常要通过ImageView进行图片资源显示。在加载图片时,首先要考虑的两个因素就是体验问题和性能问题。 其中,体验问题是指图片显示的是否正确(例如Universal-Imag…

mysql -u root -p 解释

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 mysql -u 用户名 -p 密码 是连接数据库服务器的命令。要求你输入自己连接数据库的用户名和密码。 考虑密码如果直接明文写在这条命令行…

hbase 概念

在hbase里面有几个通俗的名称会经常出现 1)Hregion region 2)Hregionserver regionserver 3)Hmaster master 4)Hmamstore memstore 5)Hfile storeFile 1、什么是hbase? 1)它是基于稀疏的、…

beta冲刺第三天

团队成员 郑西坤 031602542 (队长) 陈俊杰 031602504陈顺兴 031602505张胜男 031602540廖钰萍 031602323雷光游 031602319吴志鸿 0316206341.昨天的困难 陈顺兴:理解别人的代码 廖钰萍: 吴志鸿:无 雷光游: …

多线程详解

1. 进程与线程有那些区别和联系?   每个进程至少需要一个线程。 进程由两部分构成:进程内核对象,地址空间。线程也由两部分组成:线程内核对象,操作系统用它来对线程实施管理。线程堆栈,用于维…

AirPods的自动连接配对原理

首次连接 打开装有 AirPods 的充电盒,并将它放在 iPhone 旁边。此时你的 iPhone 上将出现设置动画。轻点「连接」,然后轻点「完成」。 就这么简单,而且会自动设置,实现与已使用同一 Apple ID 登录 iCloud 的任一支持设备搭配使用…

Linux chmod命令

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 Linux/Unix 的文件调用权限分为三级 : 文件拥有者、群组、其他。利用 chmod 可以藉以控制文件如何被他人所调用。 使用权限 : 所有使用…

模块化

我那进了"模块化研究"小组.所以嘞.研究模块化以及如何让项目的模块化更加合理和高效是我们小组的主要目的.首先,在实行模块化之前,得先巩固模块化开发的理论基础,因为理论是实践的基础。只有这样,在过程中理论与实践相结合,才有可能达到最满意…

1566:基础练习 十六进制转八进制

题目地址&#xff1a;https://acmore.cc/problem/LOCAL/1566 1 #include <iostream>2 #include <string>3 4 using namespace std;5 6 string HexToBin(string s) //16进制转2进制7 {8 string str "";9 for (int i 0; i < s.size(); i) 10…

利用fastjson对json转map的操作

String str "{\"0\":\"zhangsan\",\"1\":\"lisi\",\"2\":\"wangwu\",\"3\":\"maliu\"}"; //第一种方式 Map maps (Map)JSON.parse(str); System.out.println("这个是用J…

推荐书籍

五百本编程书籍推荐【信息化类】 书号书名作者出版时间定价对应页码TP02041企业资源计划&#xff08;ERP&#xff09;教程罗鸿2006-1&#xffe5;28.00—TP02031ERP理论、方法与实践周玉清 等2005-12&#xffe5;39.00—TP01059ERP原理设计实施&#xff08;第3版&#xff09;罗…

Linux diffstat命令

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 Linux diffstat命令根据diff的比较结果&#xff0c;显示统计数字。 diffstat读取diff的输出结果&#xff0c;然后统计各文件的插入&…

java命令--jmap命令使用(查找内存泄漏对象)

转自&#xff1a;https://www.cnblogs.com/kongzhongqijing/articles/3621163.html jdk安装后会自带一些小工具&#xff0c;jmap命令(Java Memory Map)是其中之一。主要用于打印指定Java进程(或核心文件、远程调试服务器)的共享对象内存映射或堆内存细节。 jmap命令可以获得运行…

tr069相关协议说明

截图自easycwmp官网&#xff1a;http://easycwmp.org/转载于:https://www.cnblogs.com/kiss-passion/p/10362029.html

如何revert一个merged branch上所有的改动

开发过程中如果想删除之前merged的某个branch&#xff0c;并且在merge过该分支之后又进行了多次的提交&#xff0c;可以通过以下命令进行&#xff1a; git revert -n merge_commit_id -m 1 注&#xff1a;该方法适合merge过分支后&#xff0c;没有基于该branch内容做修改的情况…

Beta 冲刺(6/7)

队名 火箭少男100组长博客 林燊大哥作业博客 Beta 冲鸭鸭鸭&#xff01;成员冲刺阶段情况 林燊&#xff08;组长&#xff09; 过去两天完成了哪些任务 协调组内工作最终测试文稿编写展示GitHub当日代码/文档签入记录(组内共享)接下来的计划 协助开发组完成标签制作展示视频制作…

Linux find命令、Linux rmdir命令、Linux ls命令

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 Linux find命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时&#xff0c;不设置任…

Android Bluetooth BLE相关开发资源汇总

Android开启蓝牙开关 转载自Android&#xff1a;Bluetooth 的打开和关闭 检查系统蓝牙是否开启 BluetoothManager bluetoothManager (BluetoothManager) this. getSystemService(Context.BLUETOOTH_SERVICE); BluetoothAdapter mBluetoothAdapter bluetoothManager.getAdapt…

__invoke,try{}catch(){},microtime(),is_callable()

<?php /*1.对象本身不能直接当函数用&#xff0c;如果被当做函数用&#xff0c;会直接回调__invoke方法* 2.验证变量的内容能否作为函数调用* 3.try{}catch(Exception $e){}catch(){}finally{}* 4.microtime()函数返回当前时间戳和微妙数* */ class httpException extends …