2013-07-05 49 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