Zeit

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Ja!
Beiträge: 271
Registriert: 02.01.2006 16:13
Wohnort: Stuttgart

Beitrag 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.
PureBasic 3.94 ; 4.2 ; 4.3
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag 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()
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

1 ms Auflösung ist totaler blödsinn, wenn man auch nen Quarz Timer im PC
hat, den man auch benutzen kann.
Bild
Benutzeravatar
Ja!
Beiträge: 271
Registriert: 02.01.2006 16:13
Wohnort: Stuttgart

Beitrag 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.
PureBasic 3.94 ; 4.2 ; 4.3
Benutzeravatar
Thomas
Beiträge: 893
Registriert: 06.07.2006 19:24
Wohnort: Regensburg
Kontaktdaten:

Beitrag von Thomas »

Ok, Danke :D
v6.00
Antworten