Funktionsaufruf durch Timer in Konsole



  • Hallo,
    wie realisiere ich einen Konsolen-Timer, der unabhängig vom Programmablauf automatisch eine Funktion aufruft?
    Ich habe jetzt schon stundenlang danach gesucht, aber nur SetTimer() und WN_TIMER gefunden. Meine Versuche sind alle gescheitert.
    Irgendwie geht das auch mit Threads (habe keine Ahnung davon...) oder?

    Ich benutze VC++6.

    Mfg, Neo2k3



  • ja, mit threads gehts. ohne allerdings eher nicht, weil ja beispielsweise bei nem scanf oder so das programm unterbrochen wird. und wenn die zeit währenddessen abläuft, passiert natürlich nichts (außer es is in nem thread).



  • #pragma comment(lib, "winmm")
    #include <mmsystem.h>
    
    #include <stdio.h> 
    #include <conio.h> 
    #include <windows.h> 
    
    extern "C" 
    { 
    	    void CALLBACK fPeriodic(UINT wTimerID, UINT msg, 
    	                            DWORD dwUser, DWORD dw1, 
    	                            DWORD dw2); 
    } 
    
    int 
    main(void)
    { 
    	    timeSetEvent(500, 100, fPeriodic, 0, TIME_PERIODIC); 
    
    	    while(getch() != ' ') 
    	            ; 
    
    	    printf("\r\n-- Program exits normally.\r\n"); 
    
    		timeKillEvent(NULL);
    
    	    return 0; 
    } 
    
    void CALLBACK fPeriodic(UINT wTimerID, UINT msg, 
    	                    DWORD dwUser, DWORD dw1, 
    	                    DWORD dw2) 
    { 
    	    printf("esvges"); 
    }
    

    Das geht auch irgendwie so, aber bei mir gibts folgende Fehler:

    error C2146: Syntaxfehler : Fehlendes ';' vor Bezeichner 'MMVERSION' (Zeile 113 in der mmsystem.h, Inhalt der Zeile: "typedef UINT MMVERSION; /* major (high byte), minor (low byte) */")
    fatal error C1004: Unerwartetes Dateiende gefunden (Zeile 113 mmsystem.h)

    Habt ihr weitere Ideen?



  • #include <windows.h> 
    #include <stdio.h> 
    #include <conio.h> 
    
    #include <mmsystem.h> 
    #pragma comment(lib, "winmm")
    

    ...

    timeSetEvent(500, 100, &fPeriodic, 0, TIME_PERIODIC);
    

    Blackbird



  • jetzt gehts, danke!!!



  • Aber dabei nicht vergessen: Der Callback wird in einem eigenen Thread aufgerufen. Man muß also gegebenenfalls den Callback mit dem Hauptthread synchronisieren.



  • wie könnte ich das ggf. realisieren?

    Hauptthread mit Callback synchronisieren?

    Kann mir jmd. ein Beispiel geben?

    Vielen Dank,

    W.Schleifer



  • LOOOL der Thread ist uralt !


Anmelden zum Antworten