ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
-
DriedPlumm
#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 »
使いこなすのが難しそうな関数ですが、ともかく面白そうなので
いろいろいじってみます。
ヒントを頂きまして、ありがとうございました。