Wartezeit im Mikrosekundenbereich



  • Weiß jemand, wie ich in Win2k eine Wartezeit im Mikrosekundenbereich realisieren kann?

    Danke im voraus für die Hilfe
    Sabine



  • Wohl kaum. Auch wenn mann ms angeben kann ist 1 ms schon hart am Limit.
    Hier:

    http://www.codeproject.com/system/timers_intro.asp
    

    gibt es einen interessanten Artikel darüber. Dort muß auch irgendwo eine Ziemlich ausführliche abhandlung über die Genauigkeit der Windows Timer geben.



  • Hat sich erledigt.



  • Danke für die schnelle Antwort BigW. Ich habe aber inzwischen rausgefunden, daß es doch geht nämlich mit CreateWaitabelTimer und SetWaitableTimer. Der macht intervalle im 100 ns bereich und das reicht mir ja.
    Werde den empfohlenen Artikel aber wohl trotzdem mal ansehen.



  • Geht das auch unter Win98?



  • hi,
    das ist interessant. bisher habe ich überall immer nur gelesen die timer von windows wären zu ungenau. z.B. geht ein "normaler" timer () in einer min 3s nach.
    die fktonen arbeiten im 100 ns - bereich - das ist schon etwas geauer! 😮

    SetWaitableTimer
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/createwaitabletimer.asp
    *Requirements

    Windows NT/2000/XP: Included in Windows NT 4.0 and later.
    Windows 95/98/Me: Included in Windows 98 and later.
    Unicode: Implemented as Unicode and ANSI versions on Windows NT/2000/XP. Also supported by Microsoft Layer for Unicode.
    Header: Declared in Winbase.h; include Windows.h.
    Library: Use Kernel32.lib.
    *

    läuft also auch unter win98.

    achja, und das hab ich noch in der msdn gefunden:

    #include <windows.h>
    #include <stdio.h>
    
    int main()
    {
        HANDLE hTimer = NULL;
        LARGE_INTEGER liDueTime;
    
        liDueTime.QuadPart=-100000000;
    
        // Create a waitable timer.
        hTimer = CreateWaitableTimer(NULL, TRUE, "WaitableTimer");
        if (!hTimer)
        {
            printf("CreateWaitableTimer failed (%d)\n", GetLastError());
            return 1;
        }
    
        printf("Waiting for 10 seconds...\n");
    
        // Set a timer to wait for 10 seconds.
        if (!SetWaitableTimer(hTimer, &liDueTime, 0, NULL, NULL, 0))
        {
            printf("SetWaitableTimer failed (%d)\n", GetLastError());
            return 2;
        }
    
        // Wait for the timer.
    
        if (WaitForSingleObject(hTimer, INFINITE) != WAIT_OBJECT_0)
            printf("WaitForSingleObject failed (%d)\n", GetLastError());
        else printf("Timer was signaled.\n");
    
        return 0;
    }
    


  • Ich möchte, wenn es wirklich auf diese Genauigkeit ankommt aber doch davor warnen, das eindach so zu lösen. Ich kenne einige Leute, die das direkt über C++ und die WinAPI versucht haben und dabei auf die Nase gefallen sind. Hier ist ein interessanter Artikel über Timergenauigkeiten:

    http://www.codeproject.com/system/simpletime.asp

    Ich selbst habe WaitableTimer noch nicht ausprobiert, würde das aber auf alle Fälle mal überprüfen, bevor ich anfange wild drauflos zu programmieren. Schließlich wird bei Sleep auch ms angegeben, auch wenn das durchaus beträchtlich variieren kann.



  • Die Zeitmesser sind schon genau genug. Aber es besteht absolut nicht die geringste Garantie, dass der eigene Prozess nach 100ns Sekunden warten wieder Prozessorzeit kriegt. Man kann die vergangene Zeit fein messen, man kann auch für mindestens 100ns Sekunden warten, aber man sollte nicht glauben, dass es nach 100ns wirklich weiter geht.



  • Der Thread ist uralt.



  • omg 😞



  • @ Optimizer:

    *lol* 😃

    Greetz, Swordfish


Log in to reply