Sleep(1)の代替法

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
DriedPlumm

Sleep(1)の代替法

#1 投稿記事 by DriedPlumm »

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

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

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

なお、「For-Nextループを30000回ほど繰り返せばど5m秒になるでしょ?」というご回答は何卒ごかんべんください。CPUビジーな方法で時間を待たせるのは避けたいのです。
イグトランス
記事: 899
登録日時: 2005年5月31日(火) 17:59
お住まい: 東京都
連絡する:

#2 投稿記事 by イグトランス »

timeSetEvent関数はどうでしょう?
指定した時間が経過した後に指定した関数を呼ぶ(あるいはイベントオブジェクトをセットする)関数です。
精度はtimeBeginPeriod/timeEndPeriod関数を併せて使えば1ミリ秒になります。
driedplum

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

#3 投稿記事 by driedplum »

使いこなすのが難しそうな関数ですが、ともかく面白そうなので
いろいろいじってみます。
ヒントを頂きまして、ありがとうございました。
返信する