最少的CPU密集型循环

Lev*_*evi 5 cpu performance autoit

此循环非常占用CPU:

While 1
    $msg = GUIGetMsg()
    Switch $msg
        Case $GUI_EVENT_CLOSE
            GUIDelete()
            Exit
        Case $control1
            Func1()
        Case $control2
            Func2()
    EndSwitch
WEnd
Run Code Online (Sandbox Code Playgroud)

这就是我一直用的东西.我知道还有其他方法,但哪一个是CPU密集度最低的?

Col*_*337 6

我也使用Switch/Case遇到了这个问题.我认为使代码更紧密,更改为Select/Case会降低CPU使用率.我最终做的是将脚本捕获到Do/Until循环中.

此摘录来自一个脚本,该脚本位于任务栏中并始终运行.用户通过单击并从我创建的上下文菜单中进行选择进行交互 这开启了各自的功能.

While 1
    Do
        $msg = TrayGetMsg()
    Until $msg <> 0
    Select
        Case $msg = $ItemDeviceModel
            DeviceModel()
        Case $msg = $ItemSerial
            SerialNumber()
        Case $msg = $ExitItem
            Exit
    EndSelect
WEnd
Run Code Online (Sandbox Code Playgroud)

在此示例中,脚本循环快速简单的Do/Until(等待用户单击应用程序图标).循环中断后,Select/Case运行.

切换代码:

While 1
    Do
        $msg = GUIGetMsg()
    Until $msg <> 0
    Switch $msg
        Case $GUI_EVENT_CLOSE
            GUIDelete()
            Exit
        Case $control1
            Func1()
        Case $control2
            Func2()
    EndSwitch
WEnd
Run Code Online (Sandbox Code Playgroud)