2013-07-05 117 views
1

我想同時啓動兩個程序。如何提高AutoIt代碼的執行速度?

  • 一個圖表顯示預期的實際輸出行(並且在執行後它顯示另一個輸出行)。
  • 另一個在它裏面有一些應用。第二個程序必須在第一個程序(帶圖)的同時開始。

但兩個程序入門之間存在不必要的延遲(微秒)。有沒有辦法加快AutoIt的執行速度?

+1

不使用AutoIt。或者設計你的程序,以便它可以處理時間延遲。 – Matt

回答

4

簡短的回答:第

更詳細的解釋:一臺計算機不能在精確的同一時間執行兩個程序。即使是多任務處理,也只是在程序之間快速切換,似乎是同時運行的效果,但事實上,它們按順序工作,而不是並行工作。即使有多個處理器內核,您也可以在一個內核上運行os調度程序,因此您可以使用大量的編程工作和定時器事件,使其運行兩個進程,每個進程都在一個專用內核上執行同一時鐘的給定類似入口點時間。但是這對你來說無能爲力,因爲你的輸出仍然會由單個顯卡和單個主板來處理,每個核心都有相同的中斷。所以對於你的具體問題,這是不可能的。

您實際上可以嘗試使用AdlibRegister將來運行指定的函數,但它也會暫停主腳本的執行...... AutoIt不能同時運行多個函數。據我瞭解,它甚至沒有這樣做,因爲它是一種解釋型腳本語言。

您可以使用另一種能夠線程化的語言來執行您想要的操作。

不管怎樣,您的Run(...)函數將不會等待終止執行,因爲RunWait會。所以兩個Run調用之間的差距應該很小。話雖如此,有待進一步討論的問題可能是:您想要達到什麼目的,以及如何在沒有AutoIt幫助的情況下實現目標?因爲你的點擊速度很可能比你對某些功能的調用速度要慢......你可以問另一個更具體的問題。但是,請提供一些示例代碼;-)

使用這個簡單的示例代碼,您可以真正證明即使使用兩個Run調用,也不能確定程序實際上是否會以給定順序出現。至少在我的電腦上(Win7 64Bit,四核酷睿i5 3.1GHz,4GB RAM),這些線路會產生一些輸出,第二個運行調用窗口出現在第一個窗口之前...大約5-15%的時間。

Opt("WinTitleMatchMode", 2) 
For $i = 1 To 50 
    $pid1 = Run("notepad") 
    $pid2 = Run("notepad") 

    $firstWin = WinWait("Notepad") 
    $winProcess = WinGetProcess($firstWin) 

    If $winProcess == $pid2 Then ConsoleWrite($pid1 & ", " & $pid2 & "; " & $winProcess & @CR) 
    ProcessClose($pid1) 
    ProcessClose($pid2) 
Next