Programmablaufsteuerung



  • Hallo Exp,

    ich habe ein Programm geschieben, welches andere Programme in einem bestimmtem Rythmus startet, z.B. alle 0,5 Sekunden. Ich habe den Aufruf der Programme über die clock Funktion in ANSII C programmiert. Jetzt habe ich jedoch festgestellt, dass das Programm beim "Warten" den Prozessor voll auslastet. Gibt es eine bessere Alternative. Es soll jedoch möglich sein, Zeiten < 1 Sek einzustellen.
    Der Nachteil der CPU Last wirkt sich bisher nicht negativ auf meine Aufgabe aus, ich würde aber trotzdem gerne wissen, ob es eine bessere Lösung gibt.
    Vielen Dank

    Manuel

    beginn: start  = clock(); // Endlosschleife
    
    for(i=0; i <= anzahl-1; i++){
    system(programme[i]); } //Programmaufruf
    
    stop = clock();
    
    diff = stop - start;
    ); 
    
    if((float)(diff/ CLOCKS_PER_SEC) > zykluszeit) {
            printf("Achtung: Ein Durchlauf ueberschreitet mit %.3f Sekunden, die eingestellte Zykluszeit von %.3f Sekunden!\n\n",(float)(diff) / CLOCKS_PER_SEC, zykluszeit);
            }
    else {  do{
               stop = clock();
               zyklus = stop - start;}
    //         printf("%.5f\n", (float) (zyklus) / CLOCKS_PER_SEC);
            while((float)(zyklus/ CLOCKS_PER_SEC) < zykluszeit);
            goto beginn;}
    


  • Richtig erkannt.
    Für Windows kannst du Sleep(Millisekunden) verwenden, für POSIX nanosleep.


  • Mod

    wochenendproger schrieb:

    Der Nachteil der CPU Last wirkt sich bisher nicht negativ auf meine Aufgabe aus, ich würde aber trotzdem gerne wissen, ob es eine bessere Lösung gibt.

    Ja: Nutze zum Warten Betriebssystemfunktionen. In welches Systemprogrammierungsforum möchtest du verschoben werden? (Ok, erledigt. Ich nehme mal an die Stichwörter von Wutz werden dir schon helfen)

    Außerdem: Dein Stil ist ... nicht so gut. Vielleicht solltest du dich erst einmal gründlich mit den Grundlagen befassen, bevor du dich an so etwas ranmachst.



  • Vielen Dank für die schnelle Hilfe.

    Still? Da ich "lerning by doing" vorgehe finde ich es sinnvoll mit einem Projekt zu beginnen. Anstatt erstmal diverse Bücher über Stille zu lesen.



  • Bei (float)(diff/ CLOCKS_PER_SEC) Wird erst diff/ CLOCKS_PER_SEC berechnet (als Integerdivision) und das Ergebnis dann nach float konvertiert. Das bringt dir nichts.
    Du möchtest ((double)diff/ CLOCKS_PER_SEC)

    Lies dir ruhig ein Buch über Programmierstil durch.
    (Das kannst du in aller Stille machen oder auch bei Musik)
    Deine Einrückungen sind unübersichtlich und beim goto fehlen mir die Worte.



  • DirkB schrieb:

    Deine Einrückungen sind unübersichtlich und beim goto fehlen mir die Worte.

    Sind wir hier etwa nicht im basi-C Forum?
    ;o)
    10 GOTO 20
    20 GOTO 10
    ^^


Anmelden zum Antworten