Sleep wie anwenden?



  • Hallo,
    ich wollte ein Programm schreiben,
    welches alle 10 Minuten F1, alle 20 Minuten F2 und alle 30 Minuten F3 simuliert.
    Hierzu habe ich mir folgendes Programmfragment hergerichtet:

    Sleep(60000); //10 Minuten
    keybd_event(VK_F1, 0, 0L, 0L); 
    keybd_event(VK_F1, 0, KEYEVENTF_KEYUP, 0L); 
    Sleep(120000);// 20 Minuten
    keybd_event(VK_F2, 0, 0L, 0L); 
    keybd_event(VK_F2, 0, KEYEVENTF_KEYUP, 0L); 
    Sleep(180000); // 30 Minuten
    keybd_event(VK_F3, 0, 0L, 0L); 
    keybd_event(VK_F3, 0, KEYEVENTF_KEYUP, 0L);
    

    Schön und gut. Das Problem ist jedoch,
    das es nun immer 60 Minuten dauert bis F3 simuliert wird
    (Sleep 20 Minuten, Sleep 10 Minuten und Sleep 30 Minuten).
    Deswegen wird F2 auch erst nach 30 Minuten simuliert.
    Ich glaube ihr habt mein Problem verstanden. 😉
    Freue mich für jede Hilfe und sage schon mal Danke



  • Naja mach es so

    int cCount = 0;
    int fCount = 0;
    while(true)
    {
     Sleep(60000);
     cCount += 1;
     fCount += 1;
     //Alle 10 Minuten
     keybd_event(VK_F1, 0, 0L, 0L);
     keybd_event(VK_F1, 0, KEYEVENTF_KEYUP, 0L); 
     if(cCount == 2)
     { //Alle 20 Minuten
       keybd_event(VK_F2, 0, 0L, 0L);
       keybd_event(VK_F2, 0, KEYEVENTF_KEYUP, 0L);
       cCount = 0;
     }
     if(cCount == 3)
     { //Alle 30 Minuten
       keybd_event(VK_F3, 0, 0L, 0L);
       keybd_event(VK_F3, 0, KEYEVENTF_KEYUP, 0L);
       fCount = 0;
     }
    
    }
    

    GreetZ 😃
    Muss jetzt weitergucken



  • Es muss natürlich

    int cCount = 0;
    int fCount = 0;
    while(true)
    {
     Sleep(60000);
     cCount += 1;
     fCount += 1;
     //Alle 10 Minuten
     keybd_event(VK_F1, 0, 0L, 0L);
     keybd_event(VK_F1, 0, KEYEVENTF_KEYUP, 0L);
     if(cCount == 2)
     { //Alle 20 Minuten
       keybd_event(VK_F2, 0, 0L, 0L);
       keybd_event(VK_F2, 0, KEYEVENTF_KEYUP, 0L);
       cCount = 0;
     }
     if(fCount == 3)
     { //Alle 30 Minuten
       keybd_event(VK_F3, 0, 0L, 0L);
       keybd_event(VK_F3, 0, KEYEVENTF_KEYUP, 0L);
       fCount = 0;
     }
    
    }
    

    sein, sorry



  • Im Übrigen wartest du da jeweils 1, 2 und 3 Minuten.



  • danke das schaut schon mal gut aus
    aber gibt es noch eine andere möglichkeit?
    denn mein Programm ist in mehreren Funktionen und abschnitten aufgeteilt...
    danke



  • Falls Dein Programm ein Fenster hat -> SetTimer (). Und davon dann gleich drei Stück.



  • hab leider kein Fenster



  • Dann arbeite mit SetTimer über ne TimerProc (und setz den hWnd-Paramter auf NULL).



  • kannst du mir bitte nen beispiel geben?
    ich bin da noch nicht so geübt 😞





  • so?

    int main() { 
    SetTimer(hwnd,             // handle to main window 
        IDT_TIMER1,            // timer identifier 
        10000,                 // 10-second interval 
        (TIMERPROC) NULL);     // no timer callback 
    
    SetTimer(hwnd,             // handle to main window 
        IDT_TIMER2,            // timer identifier 
        300000,                // five-minute interval 
        (TIMERPROC) NULL);     // no timer callback 
    
    case WM_TIMER: 
    
        switch (wParam) 
        { 
            case IDT_TIMER1: 
                //F1
    
                 return 0; 
    
            case IDT_TIMER2: 
                // F2
    
                return 0; 
        } 
    }
    

    kann es aber nicht kompilieren



  • Nein so auf keinen Fall, wie soll das auch funktionieren!!!
    Du sollst doch eine Timerproc angeben wie CodeFinder gesagt hat!

    schirrmie



  • Danke schirrmie 😉 ! War mir eigentlich zu blöd auf so einen (nicht erstgemeinten?! Troll?!) Post zu antworten...das ist so offensichtlich falsch und hat auch nicht viel mit 'ich bin da noch nicht so geübt' zu tun, sondern mit purer Faulheit, sich da einzuarbeiten (@OT: Sry, aber ist so, das ist ja nur kontextlos zusammenkopiert).

    Also der Aufruf von SetTimer sähe logischerweise so aus:

    SetTimer(NULL, 0, 1000 /*Millisekunden*/, TimerProc);
    
    void CALLBACK TimerProc(HWND hWnd, UINT uiMsg, UINT uiIDEvent, DWORD dwTime)
    {
       MessageBox(NULL, TEXT("MessageBox die jede Sekunde einmal auftaucht!), NULL, 0);
    }
    


  • ok vielen dank
    sorry, hatte grade keinen Compiler zur Hand



  • hi
    ich habe ein ähnliches Problem.
    hab mal das von oben als Beispiel genommen
    Warum funktioniert das so nicht?

    #include <windows.h>
    #include <iostream>
    #include <string>
    
    using namespace std;
    
    void CALLBACK TimerProc(HWND hWnd, UINT uiMsg, UINT uiIDEvent, DWORD dwTime) 
       { 
       MessageBox(NULL,"MessageBox die jede Sekunde einmal auftaucht!", "titel", 0); 
    }   
    
    int main()
    {    
       SetTimer(NULL, 0, 5000 /*Millisekunden*/, TimerProc);  
       Sleep(10000);
       return 0;
    }
    


  • Was soll denn das?
    1. Die MessageBox wird nicht jede Sekunde aufgerufen sondern alle 5000 Millisekunden sprich alle 5 Sekunden.
    2. Warum nutzt du eine Timerproc und noch Sleep?
    3. Das Programm wird nach dem Sleep sofort beendet also nach 10 sek.
    4. WAS funktioniert nicht?
    5. Das Programm macht das was es machen soll bzw. das was du ihm sagst 😉
    was erwartest du denn?

    schirrmie



  • Ich wollte ja auch 5 Sekunden.
    Ich habe erwartet das das Programm alle 5 Sekunden
    eine MessageBox ausgibt, was es aber nicht tut.
    Das Sleep habe ich eingefügt weil ich gehört habe,
    das das Programm dann nicht gleich beendet werden darf
    sondern man ein Sleep einfügen muss.
    Maxi1


Log in to reply