手机按键中控运行思路的个人理解
生活随笔
收集整理的這篇文章主要介紹了
手机按键中控运行思路的个人理解
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
目前而言基本的自己理解的中控多線程腳本無(wú)非就是兩種
1.主代碼作為腳本功能的載體 另外開辟一個(gè)線程作為和中控保持聯(lián)系的部分(下面只是思路 無(wú)法直接運(yùn)行)
Import "zm.luae" zm.Init /* 該思路下的基本流程 從UI界面獲取到云賬號(hào) 和 本地的配置信息---->根據(jù)自己的情況決定是上傳當(dāng)前配置到云端還是直接從云端讀取配置信息----> 開始腳本的運(yùn)行 腳本的主代碼負(fù)責(zé)腳本的主要功能 腳本開啟一個(gè)單獨(dú)的多線程來負(fù)責(zé)與中控的交互---->通過多線程 我們把主代碼里面、 的當(dāng)前腳本運(yùn)行狀態(tài) 比如正在簽到 正在切換賬號(hào)等狀態(tài)上傳到中控 然后從中控端下載 中控的運(yùn)行指令和對(duì)應(yīng)的配置信息----> 通過 多線程的共享變量 主代碼活得了中控的運(yùn)行指令和云配置的內(nèi)容 然后根據(jù)這2個(gè)信息來決定如何運(yùn)行 *///隨便定義了一些常見的變量 變量?jī)?nèi)容沒有任何意義 Dim intX,intY,結(jié)果,arr,brr,線程狀態(tài) Dim 找圖_賬號(hào)登陸界面=array(22,57,526,318,"Attachment:手機(jī)按鍵圖標(biāo).png","101010",0,0.8,100,"手機(jī)按鍵圖標(biāo)") Dim 找圖_登陸成功界面()=array(22,57,526,318,"Attachment:手機(jī)按鍵圖標(biāo).png","101010",0,0.8,100,"手機(jī)按鍵圖標(biāo)") Dim 找圖_簽到界面=array(22,57,526,318,"Attachment:手機(jī)按鍵圖標(biāo).png","101010",0,0.8,100,"手機(jī)按鍵圖標(biāo)") Dim 找圖_簽到完成界面=array(22,57,526,318,"Attachment:手機(jī)按鍵圖標(biāo).png","101010",0,0.8,100,"手機(jī)按鍵圖標(biāo)")Dim 線程id=Thread.Start(多線程_中控交互)//開啟多線程來負(fù)責(zé)和中控交互信息 Thread.SetShareVar "中控運(yùn)行指令","開啟"//這個(gè)多線程共享變量是用來控制整個(gè)腳本的開啟關(guān)閉的一個(gè)開關(guān)變量 需要從中控 //獲取運(yùn)行指令 來決定腳本的功能的開啟和關(guān)閉 默認(rèn)值為 開啟 可能是值為開啟 和 關(guān)閉 Thread.SetShareVar "腳本狀態(tài)","運(yùn)行中" //這個(gè)多線程共享變量 是負(fù)責(zé)把主線程里面腳本運(yùn)行到哪里了寫入進(jìn)入 //比如運(yùn)行到了登陸操作了 就把這個(gè)多線程共享變量改為 登陸 二字 其他操作也是如此 Thread.SetShareVar "云配置","" //這個(gè)是用來從中控那邊獲取當(dāng)前腳本對(duì)應(yīng)的云配置內(nèi)容的 多線程共享變量 按理說說默認(rèn)值為本地配置構(gòu)成的json字符串 //主代碼 簡(jiǎn)單描述下常見腳本操作 Do//每次循環(huán)前 先看看多線程是否還在 不再則開啟下 避免出現(xiàn)一些意外情況線程狀態(tài) = ""線程狀態(tài) = zm.ThreadStatus(線程id)If 線程狀態(tài) = "pending " Then //未啟動(dòng) 線程id=Thread.Start(多線程_中控交互)ElseIf 線程狀態(tài) = "running" Then//正在運(yùn)行 這個(gè)正常 可以不用任何操作ElseIf 線程狀態(tài) = "done" Then線程id = Thread.Start(多線程_中控交互)ElseIf 線程狀態(tài) = "waiting" Then//等待不可能出現(xiàn)這個(gè)情況 因?yàn)槲掖a里面根本沒有任何等待線程的命令 線程id = Thread.Start(多線程_中控交互)ElseIf 線程狀態(tài) = "cancelled" Then//被強(qiáng)制終止了線程id = Thread.Start(多線程_中控交互)ElseIf 線程狀態(tài) = "error" Then//出錯(cuò)了Thread.Stop 線程id//停止該線程 然后重啟線程Delay 2000線程id = Thread.Start(多線程_中控交互) End If//判斷下中控那邊的運(yùn)行指令 是否要停止正常的功能結(jié)果 = ""結(jié)果 = Thread.GetShareVar("中控運(yùn)行指令")If 結(jié)果 = "開啟" Then Call 切換賬號(hào)()Call 登陸()Call 簽到和領(lǐng)取禮物()ElseIf 結(jié)果 = "關(guān)閉" ThenDelay 20000 //等待20秒 然后再次檢測(cè)中控發(fā)過來的指令 End IfDelay 1000 Loop//多線程函數(shù) 這個(gè)多線程負(fù)責(zé)和中控定時(shí)交流信息 把腳本的運(yùn)行情況實(shí)時(shí)匯總給中控 //然后從中控那邊接收一些數(shù)據(jù)和控制命令 比如 Sub 多線程_中控交互()DoCall 中控交互() //這個(gè)函數(shù)負(fù)責(zé)連接中控 把本地的腳本運(yùn)行狀態(tài)和其他必要的信息上傳給中控 然后接收中控給予的運(yùn)行指令和當(dāng)前設(shè)備對(duì)應(yīng)的配置項(xiàng)內(nèi)容等東西 Delay 10000LoopEnd Sub//這個(gè)函數(shù)負(fù)責(zé)連接中控 把本地的腳本運(yùn)行狀態(tài)和其他必要的信息上傳給中控 然后接收中控給予的運(yùn)行指令和當(dāng)前設(shè)備對(duì)應(yīng)的配置項(xiàng)內(nèi)容等東西 Function 中控交互()//連接中控接口 無(wú)非是利用紫貓的netdata實(shí)現(xiàn)上傳腳本狀態(tài) 和下載當(dāng)前設(shè)備對(duì)應(yīng)的配置內(nèi)容和 運(yùn)行指令////先把本地設(shè)備的腳本狀態(tài)等信息上傳到中控 狀態(tài)信息自然是通過多線程共享變量 Thread.GetShareVar "腳本狀態(tài)" 來獲取zm.NetDataSet 當(dāng)前設(shè)備的云賬號(hào),Thread.GetShareVar "腳本狀態(tài)","云狀態(tài)表"////從中控接口獲取當(dāng)前設(shè)備的腳本對(duì)應(yīng)的配置項(xiàng)內(nèi)容 和 中控對(duì)腳本的運(yùn)行指令 是開啟還是關(guān)閉 這里還可以擴(kuò)展 比如是否定時(shí)啟動(dòng)等其他的Thread.SetShareVar "中控運(yùn)行指令",從中控獲取到的運(yùn)行指令Thread.SetShareVar "云配置",從中控獲取到的云配置信息End Function Function 切換賬號(hào)()//把 多線程共享變量的 腳本狀態(tài)改為 切換賬號(hào)Thread.SetShareVar "腳本狀態(tài)","切換賬號(hào)中"//主要切換賬號(hào)操作 End Function Function 登陸()//把 多線程共享變量的 腳本狀態(tài)改為 切換賬號(hào)Thread.SetShareVar "腳本狀態(tài)","登陸中"//主要登陸操作 End Function Function 簽到和領(lǐng)取禮物()//把 多線程共享變量的 腳本狀態(tài)改為 切換賬號(hào)Thread.SetShareVar "腳本狀態(tài)","簽到和領(lǐng)取禮物中"//主要簽到和領(lǐng)取禮物操作 End Function2.主代碼作為和中控保持聯(lián)系的載體 另外開辟一個(gè)線程作為腳本功能的載體
Import "zm.luae" zm.Init /* 該思路下的基本流程 從UI界面獲取到云賬號(hào) 和 本地的配置信息---->根據(jù)自己的情況決定是上傳當(dāng)前配置到云端還是直接從云端讀取配置信息----> 開始腳本的運(yùn)行 腳本的主代碼與中控交互 多線程只是f負(fù)責(zé)運(yùn)行主功能 把腳本當(dāng)前運(yùn)行狀態(tài)上傳 下載對(duì)應(yīng)的云配置信息和中控運(yùn)行指令 放到多線程共享變量里面 (其實(shí)不用放到這里 因?yàn)槎嗑€程只負(fù)責(zé)主功能 不需要讀取共享變量來做應(yīng)對(duì)了)--->根據(jù)從中控獲取到的2個(gè)數(shù)據(jù) 多線程通過thread.start 和thread.stop 來控制實(shí)現(xiàn)主功能的多線程的開關(guān) 這個(gè)思路比第一個(gè)思路要簡(jiǎn)單太多 但是會(huì)涉及到手機(jī)按鍵多線程和主線程 對(duì)于主線程中變量和函數(shù)的處理機(jī)制 *///隨便定義了一些常見的變量 變量?jī)?nèi)容沒有任何意義 Dim intX,intY,結(jié)果,arr,brr,線程狀態(tài) Dim 找圖_賬號(hào)登陸界面=array(22,57,526,318,"Attachment:手機(jī)按鍵圖標(biāo).png","101010",0,0.8,100,"手機(jī)按鍵圖標(biāo)") Dim 找圖_登陸成功界面()=array(22,57,526,318,"Attachment:手機(jī)按鍵圖標(biāo).png","101010",0,0.8,100,"手機(jī)按鍵圖標(biāo)") Dim 找圖_簽到界面=array(22,57,526,318,"Attachment:手機(jī)按鍵圖標(biāo).png","101010",0,0.8,100,"手機(jī)按鍵圖標(biāo)") Dim 找圖_簽到完成界面=array(22,57,526,318,"Attachment:手機(jī)按鍵圖標(biāo).png","101010",0,0.8,100,"手機(jī)按鍵圖標(biāo)")Dim 線程id=Thread.Start(多線程_腳本主功能)//開啟多線程 該多線程是用來負(fù)責(zé)腳本的正常功能 Thread.SetShareVar "中控運(yùn)行指令","開啟"//這個(gè)多線程共享變量是用來控制整個(gè)腳本的開啟關(guān)閉的一個(gè)開關(guān)變量 需要從中控 //獲取運(yùn)行指令 來決定腳本的功能的開啟和關(guān)閉 默認(rèn)值為 開啟 可能是值為開啟 和 關(guān)閉 Thread.SetShareVar "腳本狀態(tài)","運(yùn)行中" //這個(gè)多線程共享變量 是負(fù)責(zé)把主線程里面腳本運(yùn)行到哪里了寫入進(jìn)入 //比如運(yùn)行到了登陸操作了 就把這個(gè)多線程共享變量改為 登陸 二字 其他操作也是如此 Thread.SetShareVar "云配置","" //這個(gè)是用來從中控那邊獲取當(dāng)前腳本對(duì)應(yīng)的云配置內(nèi)容的 多線程共享變量 按理說說默認(rèn)值為本地配置構(gòu)成的json字符串 //主代碼 主要負(fù)責(zé)和中控的交互 Do//和中控交互 上傳和下載必要的東西 然后把得到的信息寫入到多線程的共享變量里面 等待后續(xù)的處理使用 Call 中控交互()//判斷下中控那邊的運(yùn)行指令 是否要停止正常的功能結(jié)果 = ""結(jié)果 = Thread.GetShareVar("中控運(yùn)行指令")If 結(jié)果 = "開啟" Then //先看看多線程是否還在 不再則開啟下 避免出現(xiàn)一些意外情況線程狀態(tài) = ""線程狀態(tài) = zm.ThreadStatus(線程id)If 線程狀態(tài) = "pending " Then //未啟動(dòng) 線程id=Thread.Start(多線程_腳本主功能)ElseIf 線程狀態(tài) = "running" Then//正在運(yùn)行 這個(gè)正常 可以不用任何操作ElseIf 線程狀態(tài) = "done" Then線程id = Thread.Start(多線程_腳本主功能)ElseIf 線程狀態(tài) = "waiting" Then//等待不可能出現(xiàn)這個(gè)情況 因?yàn)槲掖a里面根本沒有任何等待線程的命令 線程id = Thread.Start(多線程_腳本主功能)ElseIf 線程狀態(tài) = "cancelled" Then//被強(qiáng)制終止了線程id = Thread.Start(多線程_腳本主功能)ElseIf 線程狀態(tài) = "error" Then//出錯(cuò)了Thread.Stop 線程id//停止該線程 然后重啟線程Delay 2000線程id = Thread.Start(多線程_腳本主功能) End IfElseIf 結(jié)果 = "關(guān)閉" ThenThread.Stop 線程idDelay 20000 //等待20秒 然后再次檢測(cè)中控發(fā)過來的指令 End IfDelay 10000 Loop//多線程函數(shù) 這個(gè)多線程負(fù)責(zé)腳本主功能 Sub 多線程_腳本主功能()//因?yàn)槭謾C(jī)按鍵多線程的特點(diǎn) 要在多線程內(nèi)部擁有真正的全局變量 需要在主代碼聲明該變量 然后再多線程內(nèi)賦值 這樣才可以找圖_賬號(hào)登陸界面=array(22,57,526,318,"Attachment:手機(jī)按鍵圖標(biāo).png","101010",0,0.8,100,"手機(jī)按鍵圖標(biāo)")找圖_登陸成功界面()=array(22,57,526,318,"Attachment:手機(jī)按鍵圖標(biāo).png","101010",0,0.8,100,"手機(jī)按鍵圖標(biāo)")找圖_簽到界面=array(22,57,526,318,"Attachment:手機(jī)按鍵圖標(biāo).png","101010",0,0.8,100,"手機(jī)按鍵圖標(biāo)")找圖_簽到完成界面=array(22,57,526,318,"Attachment:手機(jī)按鍵圖標(biāo).png","101010",0,0.8,100,"手機(jī)按鍵圖標(biāo)")DoCall 切換賬號(hào)()Call 登陸()Call 簽到和領(lǐng)取禮物()Delay 1000LoopEnd Sub//這個(gè)函數(shù)負(fù)責(zé)連接中控 把本地的腳本運(yùn)行狀態(tài)和其他必要的信息上傳給中控 然后接收中控給予的運(yùn)行指令和當(dāng)前設(shè)備對(duì)應(yīng)的配置項(xiàng)內(nèi)容等東西 Function 中控交互()//連接中控接口 無(wú)非是利用紫貓的netdata實(shí)現(xiàn)上傳腳本狀態(tài) 和下載當(dāng)前設(shè)備對(duì)應(yīng)的配置內(nèi)容和 運(yùn)行指令////先把本地設(shè)備的腳本狀態(tài)等信息上傳到中控 狀態(tài)信息自然是通過多線程共享變量 Thread.GetShareVar "腳本狀態(tài)" 來獲取zm.NetDataSet 當(dāng)前設(shè)備的云賬號(hào),Thread.GetShareVar "腳本狀態(tài)","云狀態(tài)表"////從中控接口獲取當(dāng)前設(shè)備的腳本對(duì)應(yīng)的配置項(xiàng)內(nèi)容 和 中控對(duì)腳本的運(yùn)行指令 是開啟還是關(guān)閉 這里還可以擴(kuò)展 比如是否定時(shí)啟動(dòng)等其他的Thread.SetShareVar "中控運(yùn)行指令",從中控獲取到的運(yùn)行指令Thread.SetShareVar "云配置",從中控獲取到的云配置信息End Function Function 切換賬號(hào)()//把 多線程共享變量的 腳本狀態(tài)改為 切換賬號(hào)Thread.SetShareVar "腳本狀態(tài)","切換賬號(hào)中"//主要切換賬號(hào)操作 End Function Function 登陸()//把 多線程共享變量的 腳本狀態(tài)改為 切換賬號(hào)Thread.SetShareVar "腳本狀態(tài)","登陸中"//主要登陸操作 End Function Function 簽到和領(lǐng)取禮物()//把 多線程共享變量的 腳本狀態(tài)改為 切換賬號(hào)Thread.SetShareVar "腳本狀態(tài)","簽到和領(lǐng)取禮物中"//主要簽到和領(lǐng)取禮物操作 End Function這兩種各有各的好處
個(gè)人傾向第二種 結(jié)構(gòu)更加清晰 但是需要注意 多線程內(nèi)的全局變量的聲明和賦值方法
轉(zhuǎn)載于:https://www.cnblogs.com/zjl8455482/p/10349322.html
總結(jié)
以上是生活随笔為你收集整理的手机按键中控运行思路的个人理解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于这个7月
- 下一篇: ListView上移 和下移