timegettimeの動作について。


もんもん  2004-12-03 10:07:43  No: 87119

環境はVB6です。

winXPで作成したプログラムはtimeGetTimeによっておよそ20msec周期で動きます。
そのプログラムをwin2000に移して動かすと凄ーく遅くなります。

OSによってtimeGetTimeに設定可能なintervalって異なるのでしょうか?

win2000に移して、有り得ないほど低速になってしまいました。


Say  2004-12-03 21:42:24  No: 87120

timeGetTimeはマシンを起動してからの経過時間を
msec単位で返すだけの関数です。

SetTimerやtimeSetEventのように、
タイムアウトしたらコールバックするというわけではありません。

したがって、timeGetTimeにはintervalなどという概念は存在しません。


もんもん  2004-12-04 01:59:30  No: 87121

Sayさん

>timeGetTimeにはintervalなどという概念は存在しません。

おっしゃるとおりです。
言葉不足(?)でした。

以下のようなソースで、タイマとして動かしています。

/////////////////////////////////////////////////////
Private Sub highTimer()
Dim looptime As Long
Dim starttime As Long
looptime = 1

    Do
        starttime = timeGetTime()

            Call Something '処理を記述
 
        Do
            DoEvents
        Loop Until timeGetTime() - starttime >= looptime
        
    Loop
End Sub
/////////////////////////////////////////////////////

これでDLLを呼び出して、OpenGLをPictureBox内に表示しているのですが、
8FPS、即ち秒間8回しかhightimerがコールされていないようなのです。
おそらくlooptime=1で回っていないと思われるのですが…。

ちなみにXPの環境だと40FPS程度になります。

グラボとの相性なのかなんだかわからず、途方にくれています。


de  2004-12-04 03:46:59  No: 87122

>Call Something '処理を記述
ここが遅くなっていないのは確実なんですか?
Call Something
の前と後ろにGetTickCount等の関数をいれて処理時間を計って
みたらどうでしょう。


ひろ  2004-12-04 04:47:15  No: 87123

なんとなく Call Somethingが遅いだけ軒がしますが。

あと、蛇足かもしれませんが、長い日数起動したままのアプリケーションの場合は、timeGettimeの値がオーバーフローしてしまった時のことも考慮する必要がありますね。
(49.7日で符号無し32bit整数の上限値を超えます)


のの  2004-12-05 06:24:18  No: 87124

私の場合、OpenGLを使っていて
グラボとの相性の悪いコマンドなんかがあったのを記憶しています。
wglCreateContext()とwglDeleteContext()だったかなぁ…。
Radeon9100と相性悪かったような…。

曖昧な意見で申し訳ない。


IMA  2004-12-05 16:29:16  No: 87125

timeGetTimeの精度設定はされていますでしょうか?
ご参考までに

http://www1.odn.ne.jp/psx-alternative/document_tech01.html
http://www.microsoft.com/japan/msdn/library/ja/jpmltimd/html/_win32_timegettime.asp
http://www.microsoft.com/japan/msdn/library/ja/jpmltimd/html/_win32_timebeginperiod.asp


のの  2004-12-07 01:53:01  No: 87126

VBで精度設定の効果ってあります??
自分がやったときは、全くといってよいほど効果なしでしたよ。


IMA  2004-12-07 02:26:26  No: 87127

>ののさん

私の環境(Win2000,VB6 sp5,6)では、timeBeginPeriod などを実行しないと
timeGetTimeは約10msec程度の精度というか、その間同じ値を返してきていました。(値自体はmsec単位で返します)

よって、
 Loop Until timeGetTime() - starttime >= looptime
では最大10msecウエイトが掛かると思ったのですが・・・


IMA  2004-12-07 03:01:02  No: 87128

すいません

Call Something で 10msec以上掛かっているようなので
関係なかったですね    (^^;)


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加