HALといえば2001年宇宙への旅立ち?
見たことは無いのですが有名な映画です。
うる覚えなのですが、HALという最強コンピューターとモノマーが戦う?
そしてHALはIBMの一文字上をとってなずけられたと
H⇒I A⇒B L⇒M
話しが脱線しました。
結局ウインドウズは10msもしくは16ms単位で割り込み処理をしているようです。
OSの特性のようですので、他のOSの場合違うようです。
そこでVPS上で測定です。
使えるねっとUS と お名前.COM日本で測定しました。
ソースはこちら 純粋にVPSの最適な秒間隔の比較です
前回の失敗 一回目と二回目はカウントしません
int i,k,l,m,os;datetime t;string texts;
extern int j=1;
void OnInit(){EventSetMillisecondTimer(j);}
void OnDeinit(const int reason){EventKillTimer();}
void OnTimer(){
if(os==TimeSeconds(TimeLocal()))
{i++;}
else{m++;if(m>2)
{k++;l+=i;texts=TimeMinute(TimeLocal())+":"+TimeSeconds(TimeLocal())+" count"+(l/k)+" "+m;Comment(texts);}
i=1;os=TimeSeconds(TimeLocal());
}}
使えるねっとは最多が15秒間隔、次点が3,4秒間隔です。
お名前.COM日本は2,3秒間隔が最多です。
両方15msを超えると急に回数が減ります。
複数回測定してもほぼ同じ値が出ます
おなじWIN2008のはずです。
なぜ違う結果になったかは謎・・・
なぜ違う結果になったかは謎・・・
EventSetMillisecondTimerは使えるUSでは15msがよさそうですね。
あー。すみません。少し勘違いさせてしまいましたか。OSの仕組みに依存していますが、HALはハードウェア依存のDLLです。(hardware abstraction layerの略で、日本語ではハードウェア抽象化レイヤーといいます。)
返信削除この場合、この場合、つかえるネットとお名前.comで使用しているVPSサーバーアプリの違いに差が出ていると思われます。(VPSが仮想ハードウェアとして動作しているためです)
なお、どうしても16ms以下の最小値にしたい場合は、timeBeginPeriodというWindowsAPIをたたくやり方がありますが、システム全体が不安定になる可能性がございますので、ご注意ください^^;;;;主にゲームなどで使われる設定ですので、VPS向けの指定ではないです・・。
また、例えば、timeBeginPeriodに1を設定しても実行タイミングは0.8ms~2msぐらいの間で揺れます。これもWindowsのプロセス管理による待ち時間制御に影響されるためです。
ちなみに15msの次は、25msぐらいになります。タイマ設定の分解能が約10ms(これもハードウェア構成で変わる)のためです。
だいすけさん
返信削除またもや解説ありがとうございます。
お名前.COMの回数が多くなった理由が分かった気がします。
Amser1.2に早速15msで導入してリアルテスト開始しました!
だいすけさんは何でもご存知ですねー