alternative zu Sleep()
-
Du könntest doch den Sleep Befehl nachahmen

einfach ne Schleife mache die nix tut:
for(long i=0; i<1000000; i++);Nachteil ist natülich das der Prozess volle Last hat, Du keine Chance hast das Teils zu unterbrechen und das das Teil auf jedem Rechner unterschiedlich lang braucht.
Also unter dem Strich nicht zu empfehlen
-
Nachteil numéro due: Das Ding wird vom Compiler wegoptimiert :p .
-
MaSTaH schrieb:
Nachteil numéro due: Das Ding wird vom Compiler wegoptimiert :p .
sehr gut aufgepasst.
ausser der nimmt einen der nicht optimiert
aber ist auch dumme lösung
-
Also mal abgesehen davon, dass er das Programm dann nur noch auf seinem Rechner starten kann, wegen anderen Prozessorgeschwindigkeiten, ist das im Allgemeinen keine gute Lösung. Aber ich habe auch keine Lösung für das Problem ohne Threads...
Wie ist das eigentlich, gibt es denn eine Alternative zu dem Sleep ( ), eine die in millisekunden zählt, wie das GNU-Linux sleep ( ms ). Sleep kann ja nur Sekunden zählen.
-
AlCheMy schrieb:
Wie ist das eigentlich, gibt es denn eine Alternative zu dem Sleep ( ), eine die in millisekunden zählt, wie das GNU-Linux sleep ( ms ). Sleep kann ja nur Sekunden zählen.
ne stimmt net sleep(1000) = 1 sec. d.h. sleep(1) ist was????????
-
sleep (1) ist dann 1/1000 sek. = 1 millisekunde (milli entspricht tausend)...
-
Hallo Leute,
hab in Zusammenhang mit Sleep einen COM-Port tockeln lassen. Ein Sleep(1) (1ms!) dauert in minimum 8-9ms, also kannst Du einen Sleep kleiner als 8-9ms nie durchführen. Zumindest nicht in W2K und XP!

Gruß
Chris
-
//in .h static UINT DeinThread(LPVOID pParam); //in.cpp UINT CDeinDlg::DeinThread(LPVOID pParam) { //CDeineAusführklasse muss vom Typ //CWinThread sein //mach was //Da static musste ((CDeinDlg*)pParam)-> verwenden } void CDeinDlg::ButtonClick() { AfxBeginThread(DeinThread, this) }Also ich möchte jetzt das doch mit Threads machen. Habe also die Methode angelegt. Und habe auch verstanden, das wenn ich die Funktion AfxBeginThread(DeinThread, this) aufrufe, das er dann in die Methode DeinThread() rein geht. Aber was hat das für einen Vorteil? Für mich sieht das so aus, als wenn das nur ne Methode ist. Oder irre ich mich da? Habe das Prinzip bzw. den Vorteil noch nicht verstanden. Helft mir
MFG
-
Versuchs mal damit:
void CTestDlg::SleepEx(CWnd *wnd, int Time) { int start = GetTickCount(); while ((signed)GetTickCount() - start < Time) { MSG msg; if (::PeekMessage(&msg,NULL,0,0,PM_REMOVE)) { if (msg.message == WM_QUIT) { ::PostQuitMessage(-1); } if (!wnd->PreTranslateMessage(&msg)) { ::TranslateMessage(&msg); ::DispatchMessage(&msg); } } } }Aufruf mit SleepEx(this,2000);
-
vetti du bist ein alter ruler!!!! Weiß zwar nicht wie du das wieder hinbekommen hast, aber RESPECT!!! Denn nur du hast es drauf!!! Gruß an den burna. Kannst du mir auch bei den anderen sachen helfen??? Farbe von Button und hintergrundfarbe etc. Du rockst die Bude echt durch!!!
MFG SPAXX
-
AlCheMy schrieb:
sleep (1) ist dann 1/1000 sek. = 1 millisekunde (milli entspricht tausend)...
ahmm, war eigentlich ne rhetorische frage, aber nichts fuer ungut fuer deine mathe nachhilfe
jep sleep(1) geht net unter xp. sollte man eher machen ab sleep(25) oder so noch besser ( um sicher zu gehen ) sleep(50). xp ist halt kein abgespecktes realtime betriebssystem, oder ein optimierter microcontroller.
-
MaSTaH schrieb:
Nachteil numéro due: Das Ding wird vom Compiler wegoptimiert :p .
hmm ein kleiner nachtrag
wenn er jetzt volatile als schluesselwort davor schreibt musst er es trozdem stur machen oder? oder optimiert ein compiler heutzutage sowas auch schon???