Seite 2 von 2

Verfasst: 30.08.2006 16:51
von ts-soft
Ja! hat geschrieben: Der ist auch nicht genauer als die aus der API.
Beide sind min. 1ms.
1. hängt von der WindowsVersion ab!
2. der HighResTimer muß als solches initialisiert werden, was in der PBOSL Lib in der InitFunction passiert:

Code: Alles auswählen

/*
 *
 *  Copyright (c) 2002-2005 by Danilo Krahn
 *
 *    This library is free software; you can redistribute it and/or
 *    modify it under the terms of the GNU Lesser General Public
 *    License as published by the Free Software Foundation; either
 *    version 2.1 of the License, Or (at your option) any later version.
 *
 *    This library is distributed in the hope that it will be useful,
 *    but WITHOUT ANY WARRANTY; without even the implied warranty of
 *    MERCHANTABILITY Or FITNESS For A PARTICULAR PURPOSE.  See the GNU
 *    Lesser General Public License For more details. 
 *
 */
#include <PBOSL.h>
#include <windows.h>

extern TIMECAPS PBOSL_Timer_Resolution;



PBFUNCTION(void) PB_PBOSL_Timer_Init(void) {
   unsigned long i;

   // get Windows min & max timer resolutions
   timeGetDevCaps(&PBOSL_Timer_Resolution, sizeof(TIMECAPS));
   // start using high precision timers
   // with minimal possible resolution
   timeBeginPeriod(PBOSL_Timer_Resolution.wPeriodMin);

   // init handles and procedures with 0
   for(i=0; i<16; i++) {
      PBOSL_Timer_Handles[i]    = 0;
      PBOSL_Timer_Procedures[i] = 0;
   }
}
Kann man natürlich auch in PB machen, die Initialisierung gilt für alle
Aufrufe dieses Processes.

// Nachtrag:
Es gibt mind. 3 versch. Arten von Timern
1. normaller API-Timer
2. API-Timer als HighResolution Timer
3. MultiMedia Timer

Unterschiede sind Abhängig von WinVersion, Harware usw.

Verfasst: 30.08.2006 17:10
von Ja!
@ts

Habe Win2000 und wenn ich nen normalen API-Timer erstelle, dann hat der eine Auflösung von 1ms.
Ich glaube kaum, daß sich das in neueren Wins verändert hat, oder doch?

In welcher Win-version ist er denn langsamer, abgesehen von viell. W95?


Mir ist klar, daß man die Timer Auflösung einstellen kann.. aber ich meinete, daß die min. immer 1ms ist.

Verfasst: 30.08.2006 17:14
von Kaeru Gaman
der normale timer gibt zwar in ms als einheit an,
aber seine auflösung liegt irgendwo bei 1/120sec.
daher auch die ungenauigkeiten bei ElapsedMilli

Verfasst: 30.08.2006 17:19
von DarkDragon
Ja! hat geschrieben:@ts

Habe Win2000 und wenn ich nen normalen API-Timer erstelle, dann hat der eine Auflösung von 1ms.
Ich glaube kaum, daß sich das in neueren Wins verändert hat, oder doch?

In welcher Win-version ist er denn langsamer, abgesehen von viell. W95?


Mir ist klar, daß man die Timer Auflösung einstellen kann.. aber ich meinete, daß die min. immer 1ms ist.
Nö es gibt in Java sogar eine Funktion, die kann alles Nanosekunden-genau sagen.

[EDIT]
http://java.sun.com/j2se/1.5.0/docs/api ... nanoTime()

Verfasst: 30.08.2006 17:31
von ts-soft
Hier mal ein link zu einem Tutorial: http://www.win-api.de/tutorials.php?tut ... fb5904978b
Im letzten Absatz steht was dazu. In der MSDN hab ich leider nichts gefunden.
Die theoretische 1 ms ist nur theoretisch und hat nichts mit der tatsächlichen
auflösung zu tun (ist nur der kleinste akzeptierte Wert der Funktionen). Ich
glaub 10 oder 20 ms ist das kleinste ohne Hardware-Timer zu nutzen.

Hier ist aber das aber Offtopic: Anfängerforum :wink:

Verfasst: 30.08.2006 17:59
von MVXA
1 ms Auflösung ist totaler blödsinn, wenn man auch nen Quarz Timer im PC
hat, den man auch benutzen kann.

Verfasst: 30.08.2006 20:15
von Ja!
Zu den Nanosekunden:

(API)
The QueryPerformanceFrequency function retrieves the frequency of the high-resolution performance counter, if one exists.

QueryPerformanceFrequency_(*lp)

Bei mir: 3579545 counts/sec.

Das benutze ich immer, um herauszufinden, welche
Befehle schneller arbeiten u.dgl.

Verfasst: 31.08.2006 14:46
von Thomas
Ok, Danke :D