在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

在Rhino引擎中實現暫停效果

汽車電子技術 ? 來源:安卓腳本 ? 作者: 稻草人 ? 2023-03-03 10:21 ? 次閱讀

好吧在文章開始之前, 我想糾正一個名稱上的說法, Autojs的用戶目前來看分為三大類:

還在使用開源版的用戶, 免費 版本號截止到4.1.1之前

使用Pro8.0版本的用戶, 該版本不包含node引擎,只有Rhino引擎

使用Pro9.0版本的用戶, 該版本包含Node和Rhino兩個引擎

免費版我們就稱為免費版, Pro8.0版本,直接說8.0版本或者pro8,同理9.0一樣9.0版本或者pro9, 現在對于8.0和9.0的autojs存在很多叫法, 這種叫法非常容易和別的概念混淆,什么V8. V9 V8引擎, 一代引擎, 二代引擎,各種奇葩叫法, 請放棄這些花里胡哨的說法, 直接回歸最基本的名稱好吧,方便大家溝通, 另外一代 二代的叫法只是對于文檔來說的.

8.0版本中只有rhino引擎,它使用的是JavaScript ES5標準,另外有少許的ES6特性,使用時,閱讀官網的一代文檔, 8.0不包含NodeJS引擎,也就是說,Nodejs的代碼無法在8.0版本中運行;

9.0版本中包含8.0版本的Rhino引擎,使用方法和8.0一樣,開發文檔使用一代文檔(注意不要稱為一代引擎), 另外從9.0版本開始加入了Node引擎,可以使用nodejs來開發項目,node引擎使用的是二代文檔, Node引擎和Rhino引擎都可以在pro9.x版本以上使用.

因此,如果你使用的是Pro9.x版本,遇到問題, 請像這樣描述: "我使用的是Pro9, 代碼開發使用的是rhino引擎, 在運行時遇到下列錯誤...", "我使用的是9.0版本,使用的是Node引擎開發環境, 運行代碼時發生這樣的錯誤..."


正文開始: (不好意思忍不住吐槽了一下.)

昨天,又遇到來問,JS代碼中怎么暫停/繼續代碼的執行,之前一直不想做這個功能, 因為JS本身在運行時,就不支持暫停,如果非要做暫停的話. 我能給出的方案,只有使用死循環來暫停運行, 其大概原理, 循環判斷某個屬性的值是否符合預期,如果符合,就暫停運行, 不符合了就跳出循環,繼續執行下方的代碼, 并且呢,這個死循環,要加到代碼的每一行中.

呵~這種做法,TMD聽起來就有點離譜.既然非得要,那必然得犧牲點什么罷...

那么,干貨來了, 下面的代碼是封裝好的一個模塊:

module.exports = ( function() {


    let MianThread;


    let IsRun = false;
    let IsPause = false;
    //就是在要運行的代碼中逐行插入這句代碼...
    let PauseFun = "while( true ){ if ( !IsPause ) { break; } sleep( 10 ); }";

    this.SetRunState = function( state ) {
        IsRun = state;
    }
    this.GetRunState = function() {
        return IsRun;
    }
    this.SetPauseState = function( state ) {
        IsPause = state;
    }
    this.GetPauseState = function () {
        return IsPause;
    }
    /**
     * 保證功能不會被重復運行.
     * @param {*} main 要執行的功能函數
     * @returns void
     */
    this.RunScript = ( main ) => {
        try {
            if ( this.GetRunState() ) {
                toastLog( "該功能正在運行,無法重復運行" );
                return;
            }
            let mainStr = main.toString();
            let mainStrArry = mainStr.split( "\\n" );
            let mainFunStr = "";
            for ( let i in mainStrArry ) {
                if ( mainStrArry[ i ] == "" ) continue;
                if ( i <= mainStrArry.length - 3 ) {
                    mainFunStr += mainStrArry[ i ] + "\\n" + PauseFun + "\\n";
                }
            }
            mainFunStr += "}";
            main = eval( mainFunStr );
            // log(main.toString());
            this.SetRunState( true );
            MianThread = threads.start( main );
        } catch ( e ) {
            toastLog( "[ CATCH_INFO ]: " + e );
            this.SetRunState( false );
            return;
        }
        //等待運行腳本的線程執行完成,改變狀態
        threads.start( () => {
            if ( MianThread ) {
                MianThread.join();
                this.SetRunState( false );
            }
        } );
    }
    this.Stop = function() {
        if ( this.GetRunState() ) {
            MianThread.interrupt();
        }
    }

    this.Pause = function() {
        if ( !this.GetPauseState() ) {
            this.SetPauseState( true );
            console.log("當前邏輯已暫停!");
        } else {
            console.log( "繼續執行代碼邏輯" );
            this.SetPauseState( false );
        }
    }


    return this;
} )()

模塊中封裝了幾個方法, 通過兩個屬性的bool值去控制 傳入方法的運行狀態. 在使用runScript( main ); 方法時, 對于傳入的main函數,進行重新封裝,逐行插入死循環代碼...然后再運行這個函數. 在線程外通過Pause()方法去控制暫停和繼續.然后寫一個簡單的demo.

"ui";


$ui.layout( 
    "*" gravity="center|center_horizontal|center_vertical">
        "center|center_horizontal|center_vertical" margin="20" cardCornerRadius="8dp" cardElevation="5dp" >
            "20 10" gravity="center|center_horizontal|center_vertical">
                
                    "16sp">運行結果: class="hljs-name"text>
                    "runResult" inputType="text" singleLine="true" gravity="center"  w="*" h="60" textSize="18sp" />
                class="hljs-name"linear>
                "center" >
                    
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • JS
    JS
    +關注

    關注

    0

    文章

    78

    瀏覽量

    18126
  • 循環
    +關注

    關注

    0

    文章

    92

    瀏覽量

    16001
  • 代碼
    +關注

    關注

    30

    文章

    4801

    瀏覽量

    68734
收藏 人收藏

    評論

    相關推薦

    基于Notes的OA工作流引擎的設計和實現

    。Lotus Domino/Notes平臺下實現的工作流,具有代碼少、易開發、易實現和安全性高等特點。以此工作流為基礎,開發網上協作系統,會達到投入少和收效高的效果。工作流技術的使用
    發表于 04-24 09:22

    labview數據采集暫停文件寫入pausel

    用labview采集數據,并記錄到某個文件,按下暫停按鈕后,怎么文件寫入pausel以表示曾經暫停過,哪位高人指點一下,在此先謝過了。
    發表于 02-21 15:40

    怎么labview實現靠邊自動隱藏效果??

    labview實現靠邊自動隱藏效果,就是類似于QQ界面靠近電腦的屏幕的邊上就是自動隱藏這樣子的一個功能,謝謝了。。。
    發表于 11-02 21:43

    請問labview程序如何添加暫停按鍵?

    labview程序如何添加“暫停”按鍵!實現和工具欄暫停”按鍵一樣的功能。功能要求:程序開始運行后按“
    發表于 08-08 17:32

    Rhino+工具套件能實現什么功能?

    Rhino+。愛特梅爾的AT88SA102S器件是業界最安全的認證IC,使用嵌入式SHA-256 引擎和256位加密密鑰,幾乎無法使用任何暴力方法擊破,而競爭對手最接近的認證IC之密鑰容量僅為128位
    發表于 08-16 06:21

    實現暫停程序,再次運行后還能恢復暫停前狀態

    labview如何實現點擊暫停暫停程序,再點擊運行鍵的時候程序恢復到暫停前的狀態,設置的實驗次數也能從暫停時繼續完成剩下的次數?有大神能幫
    發表于 11-02 11:11

    如何讓程序執行過程暫停

    你如何讓程序執行過程暫停,就像Arduino 的 通過 Basic 的 delay 函數: delay: 會等待一定的毫秒數再繼續
    發表于 05-10 07:22

    基于Rhino3D開發平臺的鞋楦二、三維相互相轉換的設與實現

    本文介紹了一種基于Rhino3D 開發平臺的鞋楦二、三維之間相互轉換的設計,該設計使得鞋楦二維到三維和三維到二維的轉換得到統一實現。并且滿足轉換前后,二維鞋樣和三維鞋樣的
    發表于 09-14 14:43 ?0次下載

    數據引擎技術的原理及其DCS的應用

    數據引擎技術的原理及其DCS的應用 一、引言     &nbs
    發表于 03-05 15:32 ?1223次閱讀

    虛幻引擎4使用多核最大化視覺效果

    3-2-1 GLORP!看看這個UE4展示CPU粒子的虛幻引擎演示。
    的頭像 發表于 11-05 06:40 ?4665次閱讀

    Rhino軟件教程之Rhino6.0如何精確的移動物件

    今天給大家分享一個關系犀牛(Rhino6.0)的小知識。希望對大家有所幫助和提升。
    的頭像 發表于 11-17 10:02 ?2.3w次閱讀

    PLC控制伺服 如何實現暫停功能?

    plc控制伺服,如何實現暫停功能,基本可以從硬件和軟件的方面去實現伺服電機的暫停功能。硬件方面就是斷開伺服驅動器的電源,在這里一般都有一個常閉的信號接到驅動器電源的接觸器上,一旦發生故
    的頭像 發表于 07-02 15:43 ?1.7w次閱讀
    PLC控制伺服 如何<b class='flag-5'>實現</b><b class='flag-5'>暫停</b>功能?

    如何找回Rhino犀牛的指令框、左邊欄

    如果覺得以上步驟比較麻煩的情況下,也可以直接【Rhino選項】頁面點擊下方的【還原預設值】,即可將軟件界面的所有設置都還原成最初的設置,這樣Rhino犀牛的指令框、左邊欄也會重新恢復顯示,并正常的使用。
    的頭像 發表于 10-23 17:34 ?3w次閱讀
    如何找回<b class='flag-5'>Rhino</b>犀牛的指令框、左邊欄

    如何實現暫停GRAPH程序塊?

    博圖Graph 程序在運行過程,某些情況(報警,互鎖等)下需要將Graph 程序暫停去解決問題,當問題解決后,需要接著當前的步繼續執行Graph 程序。而OFF_SQ 這個引腳是讓Graph 程序停止運行,不能繼續往下走,這時就需要使用HALT_SQ
    的頭像 發表于 05-22 09:41 ?2266次閱讀
    如何<b class='flag-5'>實現</b><b class='flag-5'>暫停</b>GRAPH程序塊?

    波束成形AI引擎上的實現

    電子發燒友網站提供《波束成形AI引擎上的實現.pdf》資料免費下載
    發表于 09-13 14:37 ?0次下載
    波束成形<b class='flag-5'>在</b>AI<b class='flag-5'>引擎</b>上的<b class='flag-5'>實現</b>
    主站蜘蛛池模板: 日本特黄在线观看免费| 黄色网址在线免费观看| 午夜免费福利影院| 天堂bt资源新版在线| 色婷婷在线观看视频| 欧美18videosex性欧美69| 手机午夜看片| 天天干视频在线| 毛片在线不卡| 四虎东方va私人影库在线观看| 国产美女主播在线| hs网站免费| 奇米影视四色7777久久精品| www激情com| 国内精品久久久久久久久野战| 成人伊在线影院| 天天天天射| 成人5252色| 亚洲日本欧美| 五月婷婷伊人网| 欧美成人午夜| 国产精品久久久久久久久kt| 天天做天天看夜夜爽毛片| 国产真实乱在线更新| 亚洲一在线| 五月婷婷婷婷| 黄色免费在线视频| 午夜视频入口| 91无毒不卡| 国产精品久久久久久久久久妇女| 日本一区二区三区不卡在线看| 欧洲熟色妇| 中文天堂最新版在线中文| 日本免费网站在线观看| 国产精品一一在线观看| 天天做天天爽爽快快| 色135综合网| 亚洲人成影网站~色| 免费看黄的视频软件| 午夜影院免费入口| 欧美1819|