Memnoch1337
Cadet 1st Year
- Registriert
- Apr. 2012
- Beiträge
- 10
Hallo,
ich habe bereits in einem anderen Thread hilfe erfragt(https://www.computerbase.de/forum/threads/echtzeitgarantie-unter-windows-xp.1047641/#post-11836106) und wollte nun einen Lösungsvorschlag ausprobieren.
Daher wollte ich in Eigenarbeit dieses Programm schreiben:
http://www.lucashale.com/timer-resolution/
Wie auch auf der eben genannten Website steht benötigt man folgende Routine für die Umsetzung:
http://msdn.microsoft.com/en-us/library/windows/desktop/dd743626(v=vs.85).aspx
Nun habe ich ein einfaches Programm geschrieben, welches das Prinzip umsetzen soll.
Programm:
Ausgabe(gekürzt -- gibts hier irgendwie Spoiler? ):
So wie ich das verstanden habe sollte doch nun die Systemzeit jede Millisekunde umschalten, dementsprechend sollte ich 1000 Ausgaben haben und nicht weit weniger. Oder habe ich das Prinzip nicht richtig verstanden?
Ich dachte ich passe die Systemzeit nun so an, dass sie eben nicht mehr alle 10-15 Millisekunden aktuallisiert, sondern jede Millisekunde.
Vielen Dank schonmal!
Gruß,
Memnoch.
ich habe bereits in einem anderen Thread hilfe erfragt(https://www.computerbase.de/forum/threads/echtzeitgarantie-unter-windows-xp.1047641/#post-11836106) und wollte nun einen Lösungsvorschlag ausprobieren.
Daher wollte ich in Eigenarbeit dieses Programm schreiben:
http://www.lucashale.com/timer-resolution/
Wie auch auf der eben genannten Website steht benötigt man folgende Routine für die Umsetzung:
http://msdn.microsoft.com/en-us/library/windows/desktop/dd743626(v=vs.85).aspx
Nun habe ich ein einfaches Programm geschrieben, welches das Prinzip umsetzen soll.
Programm:
Code:
#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
#include <time.h>
#define TARGET_RESOLUTION 1 // 1-millisecond target resolution
#pragma comment ( lib, "WinMM.Lib" )
int _tmain(int argc, _TCHAR* argv[])
{
char str [80];
int i;
SYSTEMTIME now, then;
TIMECAPS tc;
UINT wTimerRes;
then.wMilliseconds=0;
if (timeGetDevCaps(&tc, sizeof(TIMECAPS)) != TIMERR_NOERROR) //die "geklaute" Routine zur Systemzeitanpassung
{
// Error; application can't continue.
printf("Error; application can't continue.\n");
}
wTimerRes = min(max(tc.wPeriodMin, TARGET_RESOLUTION), tc.wPeriodMax); //minimale Resolution finden
if(timeBeginPeriod(wTimerRes) == TIMERR_NOERROR){
printf("No_Error; Timer running.\n");
printf("Min: %03d\n", tc.wPeriodMin); //minimale periodendauer, bei mir 001
printf("Max: %03d\n", tc.wPeriodMax); //maximale periodendauer, bei mir 1000000
for(i=0;i<100;i++){
GetSystemTime(&now);
if(then.wMilliseconds != now.wMilliseconds){ //vergleich ob sie sich systemzeit zum letzten durchlauf geändert hat
printf("%d: Zeit: %02d.%03d\n", i, now.wSecond, now.wMilliseconds); //gib die aktuelle Systemsekunde und Systemmillisekunde aus
}
Sleep(1); //schläft eine milisekunde
then = now;
}
timeEndPeriod(wTimerRes);
}
scanf ("%s",str);
return 0;
}
Ausgabe(gekürzt -- gibts hier irgendwie Spoiler? ):
Code:
No_Error; Timer running.
Min: 001
Max: 1000000
0: Zeit: 40.675
2: Zeit: 40.691
10: Zeit: 40.706
18: Zeit: 40.722
26: Zeit: 40.738
34: Zeit: 40.753
42: Zeit: 40.769
50: Zeit: 40.785
58: Zeit: 40.800
66: Zeit: 40.816
74: Zeit: 40.831
82: Zeit: 40.847
90: Zeit: 40.863
98: Zeit: 40.878
Ich dachte ich passe die Systemzeit nun so an, dass sie eben nicht mehr alle 10-15 Millisekunden aktuallisiert, sondern jede Millisekunde.
Vielen Dank schonmal!
Gruß,
Memnoch.
Zuletzt bearbeitet: