2009-03-19 8 views
2

Wie können wir unsere eigene Timer-Funktion in Windows implementieren, ohne Bibliotheksfunktionen zu verwenden? Sollten wir mit Assembleranweisungen umgehen?Wie Implementieren des Usermode-Timers in C?

+0

sind sie nicht in stdlib? – cobbal

+0

Ohne eine einzige Bibliotheksfunktion zu verwenden? Oder nicht mit bestimmten Funktionen? Ich sehe nicht, wie Sie ohne lib-Aufruf Systemzeit bekommen können. – Paxic

+0

Ich muss wissen, wie eine einfache Zeit implementiert werden kann. Natürlich ist es möglich, auf Plattform-APIs zu vertrauen. Ohne das zu nutzen, wie kann man das umsetzen? – sarat

Antwort

4

Dies hängt von der Genauigkeit und Auflösung ab, die Sie benötigen.

Angenommen, Sie benötigen mehr als die zweite Genauigkeit, ist es beliebt, die RDTSC Anweisung einzupacken/zu verwenden. Sie können aber auch einfach die Win32-API verwenden, die QueryPerformanceCounter() ist dafür weit verbreitet.

0

Viele APIs wie Threading Building Blocks von Intel (http://threadingbuildingblocks.org), OpenMP (http://openmp.org), SDL (http://libsdl.org) oder SFML (http://sfml-dev.org), und ich denke, auch OpenGL (http://opengl.org) um einen Zeitgeber einen Timer oder einen Wrapper implementieren.

Sagen "ohne Bibliothek Funktionen zu verwenden" ist ein bisschen vage: Welche Bibliothek meinst du speziell? Am Ende müssen Sie eine Bibliotheksfunktion oder Inline-Assemblierung verwenden, da C++ keine Timing-Funktionalität in der Kernsprache hat. Und ohne einen Timer-Prozessor oder irgendeine andere Timing-Hardware in welcher Form (*), gibt es keine Möglichkeit, die Zeit zu bestimmen, nicht vage, nicht genau.

(*) Dazu gehören Internet Time Provider.

+0

keine Standard-C-Bibliotheksfunktionen oder Windows-APIs verwenden – sarat

0

erhalten Sie die Atomuhrzeit von einem Internet-Zeitdienst.

Sonst werden Sie immer mit einer Art von Bibliotheksfunktionen arbeiten, mit denen Sie mit dem BIOS sprechen können, das ist der Teil, der das Tick-Tack vom Quarz für das OS sichtbar macht.