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.