alternative zu Sleep()



  • 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???


Anmelden zum Antworten