Mein C Programm frisst zu viel Leistung



  • Wenn ich das Programm starte läuft der CPU auf 100%.
    Wie kann ich das ganze besser (leistungsärmer) lösen?

    (Anmerkung für Windowsbenutzer: system("clear") nach system("cls") abändern)

    Programm läuft wenn die systemzeit: sekunde genau auf 50

    Hier der Quellcode:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <time.h>
    
    struct tm *tmnow;
    
    struct Struk
    {
      char ip[20];
      int status;
    } struktur[100];
    
    int zaehler;
    
    int main(int argc, char **argv)
    {
      int x;
      zaehler = 0;
      time_t tnow;
    
      if(argc <= 1)
      {
        printf("Syntax: subnetzscan <ip>\n");
      }
    
      else
      {
        while(1)
        {
          time(&tnow);
          tmnow = localtime(&tnow);
          if(tmnow->tm_sec == 50)
          {
            for(x = 1; x <= argc-1; x++)
            {
              rechner(argv[x]);
            }
            system("clear");
            printf("Status der Eingaben:\n\n");
            for(x = 1; x <= zaehler; x++)
            {
              printf("IP: %s Status: ", struktur[x].ip);
              if(struktur[x].status == 1) { printf("ONLINE\n"); }
              if(struktur[x].status == 0) { printf("OFFLINE\n"); }
            }
            zaehler = 0;
          }
        }
      }
    
      return 0;
    }
    
    int rechner(char *ip_adresse)
    {
      char buffer[100];
      int status;
    
      sprintf(buffer, "ping -c 2 %s", ip_adresse);
      status=system(buffer);
      system("clear");
      printf("### PROGRAMM IN PROZESS ###\n");
    
      if(status == 0)
      {
        zaehler++;
        strcpy(struktur[zaehler].ip, ip_adresse);
        struktur[zaehler].status = 1;
      }
    
      else
      {
        zaehler++;
        strcpy(struktur[zaehler].ip, ip_adresse);
        struktur[zaehler].status = 0;
      }
    }
    

    Soll mal später in ein CGI werden.
    Hinweis: Ich weiss, das ich den bing auch selbst programmieren könnte



  • Wenn es unbedingt bei sec==50 laufen soll: Rechne dir aus, wieviele Sekunden fehlen und mach nen sleep für die entsprechende Zeit.



  • Wenn ich das richtig sehe, willst du jede Minute, wenn die Skunden 50 sind deine Aktion ausführen

    Verwende sleep(). Eine Wartezeit von 1 Sekunde reicht da schon.

    Allerdings wird deine Aktion während der Sekunde (==50 bis <51) mehrere (hundert/tausend) mal ausgeführt.


Anmelden zum Antworten