手機按鍵中控運行思路的個人理解


目前而言基本的自己理解的中控多線程腳本無非就是兩種

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.pswp.cn/news/449984.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/449984.shtml
英文地址,請注明出處:http://en.pswp.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 …