さっきふと思ったんだけど、JScriptからそのSleep専用スクリプトを作って、実行して、消せばいいじゃない?
VBSを作っているからタイムラグが出て正確なタイマーにはなりません。
俺の実験では60~80ミリ秒のラグがあります。
function Sleep(seconds){
// Creating the VBS Sleep File in C:\
var FSO = new ActiveXObject("Scripting.FilesystemObject");
var VBSleep = FSO.CreateTextFile("C:\\vbsleep.vbs", true);
VBSleep.WriteLine("dim mult : mult = wscript.Arguments.Item(0)");
VBSleep.WriteLine("wscript.sleep 1000 * mult");
VBSleep.Close();
// Calling VBS Sleep
var WshShell = new ActiveXObject("WScript.Shell");
WshShell.run("C:\\vbsleep.vbs " + seconds, 2, 1)
FSO.DeleteFile("C:\\vbsleep.vbs")
}
しかしメリットとしては、待っている間にCPUが使われません。
因みに、ミリ秒を秒にしている時点で2ミリ秒ぐらいのタイムラグが出ます。
CPU使用率より正確なタイマが必要な時に、ミリ秒で while ループにすれば良いです。
JRの方とかかな?
とにかくこんな感じ:
function Sleep(seconds){
var StartTime = new Date();
var datet = 0;
while(datet < (seconds * 1000)){
var EndTime = new Date();
var datet = EndTime.getTime() - StartTime.getTime();
}
}
これでループして毎回 経過時間 - 開始時間 という計算して、目的時間と比べているからCPUの使用率がずっと100%のままです。最近のCPUはマルチコアだけど、スクリプトはマルチスレッドじゃないから1コアだけが使用率100%になります。なので、大抵の場合は特に影響がないかもしれません。
メリット: VBSleepより正確なタイマーです。
デメリット: Sleepしている間にCPU1コアを100%で使いまくります。
なので、スリープの時間が長いか、しょぼい1コアのPCでやる時にVBS-Sleepでやったほうが良いかもしれません。
なんか、無駄にCPU使用率を100%にするのは嫌です。
僕、エコですから。
プラグインを作る気があれば、TimerEvent を使えば良い。
メリット: 上記の方法より正確でCPUにやさしい。
デメリット: Softimage以外のソフトでは使えません。当たり前ですけど。プラグインかアドオンにしないと使えません。
タイマー機能としては微妙としても、なんかの参考になれば良いな~。