如何提高AutoIt代码的执行速度?

时间:2013-07-05 06:54:41

标签: autoit

我想同时开始两个节目。

  • 其中一个图表显示预期的实际输出行(并在执行后显示另一个输出行)。
  • 另一个有一些应用程序。第二个程序必须在第一个程序(带图表)的同时启动。

但两个程序开始之间存在不必要的延迟(微秒)。有没有办法加速AutoIt执行?

1 个答案:

答案 0 :(得分: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