1

2 つのプログラムを同時に開始したい。

  • 1 つには、予想される実際の出力行を表示するグラフがあります (実行後、別の出力行が表示されます)。
  • もう一方には、いくつかのアプリケーションがあります。この 2 番目のプログラムは、最初のプログラム (グラフ付き) と同時に開始する必要があります。

ただし、両方のプログラムが開始される間に不要な遅延 (マイクロ秒) があります。AutoIt の実行を高速化する方法はありますか?

4

1 に答える 1

4

短い答え: いいえ。

より長い説明: 1 台のコンピューターがまったく同時に 2 つのプログラムを実行することはできません。マルチタスクでさえ、プログラム間の切り替えが非常に高速であるため、同時に実行する効果があるように見えますが、実際には並列ではなく順次に動作します。また、複数のプロセッサ コアを使用しても、OS スケジューラは 1 つのコアで実行されるため、多くのプログラミング作業とタイマー イベントにより、同じクロックで特定の同様のエントリ ポイントを実行する 1 つの専用コアでそれぞれ 2 つのプロセスを実行できる可能性があります。時間。しかし、出力は単一のグラフィックカードと各コアで共有される同じ割り込みを持つ単一のメインボードによって処理されるため、それはあまり役に立ちません...したがって、特定の質問については不可能です。

将来的に指定された関数を実行するために実際に使用することもできAdlibRegisterます...しかし、メインスクリプトの実行も一時停止します.AutoItは複数の関数を同時に実行することはできません. 私が理解している限り、それは解釈されたスクリプト言語であるため、そうするように設計されていません。

スレッド化が可能な別の言語を使用して、必要なことを実行できます。

とにかく、Run(...)関数は実行の終了を待つことはありませんRunWait。したがって、2 つの呼び出しの間のギャップはRunかなり小さいはずです。そうは言っても、さらに議論するための質問は次のようなものかもしれません: AutoIt の助けを借りずに、正確に何を達成したいのか、どのように目標を達成するのか? あなたのクリック速度は、いくつかの機能への呼び出しよりも速い可能性が高いため...あなたの問題についてより具体的に別の質問をすることができます. しかし、いくつかのサンプルコードを提供してください;-)

Runそして、この簡単なサンプル コードを使用すると、2 つの呼び出しを使用する場合でも、プログラムが実際に指定された順序で表示されるかどうかを確認できないことを実際に証明できます。少なくとも私のコンピューター (Win7 64Bit、Quad Core i5 3.1GHz、4GB RAM) では、これらの行は、2 回目の実行呼び出しのウィンドウが最初のウィンドウの前に表示される出力を生成します... 時間の約 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
于 2013-07-05T11:22:14.247 に答える