automatisches ausfuehren



  • hallo,

    ich steht vor einem kleinen problem... ich moechte dass mein programm zu einer bestimmten uhrzeit etwas tut, darauf habe ich exemplarische etwas geschrieben, aber(was mir vorher auch schon klar war) durch die while schleife habe ich eine auslastung von 100 %:

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    int main()
    {
        struct tm *tmnow;
        time_t tnow;
    
        while(1)
        {
                system("cls");
                time(&tnow);
                tmnow = localtime(&tnow);
                printf("%d.%d.%d\n", tmnow->tm_hour, tmnow->tm_min, tmnow->tm_sec);
    
                if(tmnow->tm_hour == 12 && tmnow->tm_min == 10 && tmnow->tm_sec == 0)
                {
                                 printf("jo");
                                 getchar();
                }
        }
        getchar();
        return 0;
    }
    

    gibt es eine moeglichkeit dieses problem zu loesen/umgehen?



  • berechne dir die wartezeit und anschließend kannst du ein

    unter unix kannst du
    sleep(wartezeit in sekunden);
    machen...
    ich glaub, unter windows wird der parameter in ms angegeben, aber es gibt sicherlich eine vergleichbare funktion fuer sekunden...



  • [springende-schallplatte]
    posix: sleep(sekunden), usleep(mikrosekunden)
    windows: Sleep(millisekunden)
    [/springende-schallplatte]



  • unter winxp home habe ich komischerweise kein Sleep... gibt es sonst noch programmiertechnische moeglichkeiten...

    ich habe es jetzt schon ein wenig mit der time.h rumgespielt... aber da lande ich auch wieder zwangsweise bei einer while schleife...



  • #include <windows.h>
    

    😉



  • ups, ich bin von system("Sleep") ausgegangen...

    😃

    dankeschoen 🙂



  • jetzt haege ich bei dem naechsten problem. wie kann die die zeit errechnen die zwischen zwei uhrzeiten liegt?

    wemm ich z.B. einen task um 16 uhr ausfuehren will und es ist 15 uhr dann ist klar wie ich die Sleep-zeit bekokmme...
    aber wie mache ich das wenn es jetzt 17 uhr ist und ich um 16 uhr den naechsten task ausfuehren will? wie komme ich dort auf die stundenzahl?

    ich hoffe ich habe jetzt nicht wieder ein brett vorm kopf und seh die stunden vor lauter minuten nicht 😉



  • mach doch keinen ultralangen sleep sondern frag' ca. alle 10 sekunden die uhrzeit ab (oder jede sekunde, wenn's genauer sein soll)

    for (;;)
    {
       if (time(0) >= actiontime)
       {
           // leg los
       }
       Sleep (1000);
    }
    


  • Kann man damit immer zurechtbasteln:

    http://www.cppreference.com/stddate/index.html



  • time() ist ein unix timestamp. um schaltsekunden brauchst du dir kaum einen kopf machen, denn der time() tag ist auch der UTC tag. jeder tag hat dann 86400 sekunden.

    ist es 17:00 uhr?

    t = time() % 86400; // sekunden seit mitternacht
    (t / 3600 == 17) && ((t / 60) % 60 == 0)
         ^ 1h                 ^ 1m  ^ 60 m/h
    

Anmelden zum Antworten