Sleep API 使用時の注意

概要で紹介した「スクリプトによる自動実行」を Sleep API で書き直した下記のスクリプトを実行してみます。

FILENUM = 5  -- テーブル項目数
file = {}    -- ファイル名称テーブル

-- ファイル名称テーブル作成(Test1.txt, Test2.txt, ..., Test5.txt)
for i=1, FILENUM do
    file[ i ] = string.format( "c:\\Temp\\擬似データ\\Test%d.txt", i )
end

-- 3秒間隔で送信(全ファイル送信で終了)
for i=1, FILENUM do
    SendFileDirect( file[ i ] )
    Sleep( 3000 )

    -- ver2.64以降では、Sleepの替わりに下記のAPIを使用すると正常に動作します。
    -- Wait( 3000 )
end

接続先には3秒周期でファイル送信が行われるのですが、 Stabilizer はモニタの描画が更新されずフリーズしたようになってしまいます。
これはスクリプト処理から戻っていないために、Stabilizerの処理が待機させられて起こる現象です。 「スクリプトによる自動実行」のスクリプトではタイマを使用しています。 タイマハンドラ内の処理は、スクリプトの実行がすでに終了したあとの Stabilizer 内で実行されるため、 描画などその他の処理も平行して行われます。

時間のかかる処理は、スクリプト実行が終了したあとの Stabilizer 内で実行される「受信ハンドラ」や「タイマハンドラ」を登録して行うようにします。 Sleep API もこれらのハンドラ内での使用にとどめるべきです。

ver2.64以降では、Sleep の替わりに Wait を使用してください。ウェイト中にメッセージが処理されるので、画面がフリーズしなくなります。