2010/08/18

スクリプトの常駐機構

NILScriptでは、キーボードやマウスなどのイベントハンドラ関数を登録している時にスクリプトの本体が末尾まで実行されてもプロセスが終了してしまわないように、「常駐カウント」という仕組みが用意されています。
イベントハンドラ関数の登録などが行われ、常駐カウントが増やされた状態でスクリプトの本体が末尾まで実行されると、メインスレッドは終了せずに常駐状態になります。イベントハンドラ関数の登録が解除されたりして常駐カウントが0になると、常駐状態から抜けてプロセスが終了します。

NILScriptに元々用意されている機能では、必要に応じて自動的に常駐カウントが増減されますが、Thread.create()で自前のスレッドを生成して、必ず最後まで実行して欲しい処理を並列実行させる場合には、下記のようにして明示的に常駐カウントを増減させる必要があります。
function count(name,num,interval){
 Thread.create(function(){
  for(var i=0;i<num;i++){
   println(name+': '+i);
   sleep(interval||100);
  }
  Main.unreside();
 });
 Main.reside();
}
count("A",10);
count("B",6,400);
「Main.reside()」が常駐カウントを増やすメソッド、「Main.unreside()」が常駐カウントを減らすメソッドです。
Main.reside()は、監視スレッド側ではなく、メインスレッド内で呼び出す必要がある事に注意してください。これは、監視スレッド内で呼び出すと、Main.reside()が実行される前にメインスレッドが終了してしまうことがある為です。

ユーザーの操作でスクリプトを終了させられるようにしたい場合は、「Main.createNotifyIcon()」でタスクトレイアイコンを作成するか、Hotstrokesで何らかのキー操作に「exit()」関数の呼び出しを割り当てておくと良いでしょう。exit()は、スクリプトを終了させる関数です。
なお、トレイアイコンやHotstrokesを使用すると常駐カウントが増やされるので、別途Main.reside()を呼び出す必要はありません。

0 件のコメント:

コメントを投稿