[C++]Sleep kleiner als ms?

Du könntest versuchen, mit SetThreadPriority die Threadpriorität auf THREAD_PRIORITY_TIME_CRITICAL

Ohgott mach das BLOSS NICHT! Threads oder Prozesse auf der höchsten Prio können u.U. HARDWARE BESCHÄDIGEN weil damit sogar der Kernel selbst übergangen wird - Microsoft rät überall wo entspr. Prios erklärt werden davon ab, höher als "high" zu gehen - und das mit gutem Grund. Wer Echtzeitanforderungen an ein Programm hat darf kein Windows benutzen, so einfach ist das. 1ms ist das Limit, kleiner kann man nicht werden - zudem macht es in fast allen Fällen keinen Sinn im Mikrosekundenbereich zu arbeiten; solche Programme sind entweder fehlerhaft oder höchst speziell und komplex, ganz einfach.

Den Schwachsinn da oben mit "Datenmüll in der Schleife produzieren" kommentiere ich mal lieber nicht .... das ist weder "unelegant" noch "unschön" - das ist einfach nur ein Programmierfehler
 
@Gast frfrehghej76:

So schlimm ist das gar nicht!
Ich selber setze manchmal im Taskmanager die Priorität höher - auch schonmal auf Echtzeit (=TIME_CRITICAL) und bis jetzt ist nichts passiert außer dass andere Prozesse (wie Explorer) langsamer liefen - mehr nicht!
 
RICHTIGE Echtzeit geht prinzipiell mit normaler PC-Hardware nicht. Das liegt auch nicht nur an nicht maskierbaren Hardware-Interrupts. Wenn es "etwas" ungenau sein darf reicht ein handelsüblicher PC natürlich.

Unter Windows würde ich den Multimedia-Timern diese Aufgabe am ehesten zutrauen. Damit es reproduzierbar ist sollte die Base und Thread-Prio etwas hochgesetzt werden und das ganze in einem separaten Thread laufen.

Würde die höchsten Prio-Stufen eher meiden, es ei denn man hat genügend freie Cores und Adminrechte :)
 
Ob Echtzeit oder nicht liegt nicht an dem Betriebssystem! Sondern an der Hardware und ich bezweifel sehr stark, dass mit aktueller Desktop- (Notebook-) Hardware eine Genauigkeit für nicht industrielle Zwecke erreicht wird (und für diese im Normalfall auch).
Ansonsten muss mir schon mal jemand erzählen wie ungenau der Prozessortakt doch ist. Ihr habt in jedem Prozessor Heutzutage genügen Prescaler und Timer ...
Dann muss man sich eben selber ein Interface schreiben um diese Genauigkeit nutzen zu können (einen Treiber).
Nehmen wir mal einen 2000MHz Takt an:
Nun setzen wir für einen Timer den Eigangstakt auf die CPU-Frequenz. Wenn der Timer nun läuft, wird er mit diser Frequenz inkrementiert. Nun nehmen wir z.B. einen 8-bit Timer und wir haben dann eine Auflösung von 256 (2^8). Dies ergibt dann:

2000000000/256 Hz = 7812500 Hz
bzw.
1/78125005 s = 11.28 µs

Soweit ich weiß gibt es in dem CPUs Bausteine die auch wesentlich höhere genaue Taktfrequenzen erzeugen können. Naja diese Genauhigkeit müsste doch eigl reichen oder?^^
Man brauch dann natürlich auch immer sehr kleine (nicht rechenaufwändige Codeblöcke z.B. bei Rechnungen immer nur mit +-1 rechnen ...)

MFG
 
Zuletzt bearbeitet:
Ich bezog mich mit "Echtzeit" auf den Menüeintrag im TaskManager.
Mir ist schon klar, das Echtzeit nicht Echtzeit ist. Es heißt eben nur so im TaskManger ;)
 
War auch nicht auf dich sondern merano bezogen und es gibt NMIs, welche man auch nutzen kann und wer genügend Maßnahmen unternimmt kann diese dann auch ohne Gefahr bei einem multicore Prozessoren nutzen.
 
Zuletzt bearbeitet:
@3Cyb3r: Nanu? Ich habe doch fast das gleiche angemerkt wie Du ? Ich sagte das es z.B. NMIs gibt und noch einiges andere was gegen "richtige" Echtzeit mit PC-Hardware spricht ...
Das NMIs (nicht deaktivierbar!) auftreten können und "richtige" Echtzeit zerstören war die Aussage.
Tastatur, Maus, Festplattencontroller lösen ebenfalls Hardwareinterrupts aus - wenn man die abschaltet hat man wohl neue Probleme ...

Entweder man lebt mit diesen Dingen, oder man braucht andere Hardware - das war das Statement.

Ansonsten würde ich direkte Register oder Kernelprogrammierung eher als Experiment ansehen. Wenn es auf beliebigen Rechnern laufen soll ist das eher keine gute Idee.

Unterschiede oder Eignung verschiedener Betriebssysteme war garnicht MEIN Thema. Sondern der Hinweis auf Timer - was auch bei Dir das Thema war, oder? (Windows nur als Beispiel ..)
 
Zurück