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 を使用してください。ウェイト中にメッセージが処理されるので、画面がフリーズしなくなります。