ページ 11

Sleep(1)の代替法

Posted: 2006年8月24日(木) 16:38
by DriedPlumm
Win32APIが提供する(?間違っていたらすいません)Sleep()関数は、たとえSleep(1)と書いたり、あるいはSleep(18)とか書いても、実際の実行時には、それぞれSleep(15)、Sleep(30)にWindowsが翻訳してしまいます。
要するに、実効精度が15m秒なわけです。

でも、どうしてももっと細かい精度が必要で、たとえば ”5m秒” だけプログラムを眠らせたいときには、何か方法がないのでしょうか?
私がもし全部のプログラムコードをアセンブラで書けるのなら、NOP命令(0x90)を数十個並べるだけでいいのに・・・と思うのですが、実際にはアセンブラは書けないし。

ご存知の方法を教えていただければ、とてもうれしいのですが。どうぞ宜しくお願いします。

なお、「For-Nextループを30000回ほど繰り返せばど5m秒になるでしょ?」というご回答は何卒ごかんべんください。CPUビジーな方法で時間を待たせるのは避けたいのです。

Posted: 2006年8月24日(木) 18:02
by イグトランス
timeSetEvent関数はどうでしょう?
指定した時間が経過した後に指定した関数を呼ぶ(あるいはイベントオブジェクトをセットする)関数です。
精度はtimeBeginPeriod/timeEndPeriod関数を併せて使えば1ミリ秒になります。

参考例ありがとうございます

Posted: 2006年8月28日(月) 14:10
by driedplum
使いこなすのが難しそうな関数ですが、ともかく面白そうなので
いろいろいじってみます。
ヒントを頂きまして、ありがとうございました。