Sich wiederholendes Programm ohne Endlosschleife?



  • Hallo zusammen,

    ich hab ein kleines Programm geschrieben, welches überprüft ob eine Datei vorhanden ist und in Abhängigkeit davon eine andere umbenennt.
    Diese Kontrolle soll alle 5 Sekunden stattfinden.

    Funktioniert auch, jedoch ist mein Prozessor zu 97% ausgelastet 😉 oO
    Wohl da es eine Endlosschleife ist. Das ganze ist eine Konsolenanwendung.

    Hat jemand ne Idee wie ich das ganze anders lösen könnte?

    #include <iostream>
    #include <fstream>
    #include <stdio.h>
    #include <windows.h>
    #include <time.h>

    using namespace std;

    int main(){
    /*
    //Verstecken der Konsole
    HWND hwnd = FindWindow("ConsoleWindowClass",NULL);
    ShowWindow(hwnd,SW_HIDE);
    //cout << "Oo\n";
    */

    int i = 0;
    int temp = 0;

    while(i< 2) {
    temp = clock() + 5000;

    while (clock() < temp) {}
    //hier wird geprüft ob .pdf vorhanden ist

    ifstream fin("C:\\fax.pdf");
    if (fin)
    {
    //cout << "File found" << endl;
    fin.close();

    //hier wird geprüft ob .txt vorhanden ist
    ifstream fin("C:\\fax.txt");
    if (fin)
    {
    //cout << "File found" << endl;

    //sind .pdf UND .txt vorhanden, dann wird .txt in .fax umbenannt.
    fin.close();
    rename("C:\\fax.txt", "C:\\fax.fax");
    }

    }

    else
    {
    //cout << "Could not find file!" << endl;
    }

    }
    }



  • JonnyDaVinci schrieb:

    Hat jemand ne Idee wie ich das ganze anders lösen könnte?

    ja indem du in das richtige sub-forum postest 😉



  • Danke;)



  • Hy DaVinci,

    also warum die Prozessorlast bei dem Programm so hoch ist ist mir derzeit ein wenig schleierhaft. Ich könnt mir nur vorstellen das diese Clock-Abfrage da so rein haut, da sie wohl eigentlich dafür nicht gedacht ist.

    Versuch doch statt

    temp = clock() + 5000;
    while (clock() < temp) {}
    

    lieber mal einfach

    Sleep(5000);
    

    Kleiner Nachtrag: Macht jetzt doch Sinn warum die Last so hoch ist. Dadurch das du einfach ne leere While-Schleife hast muss er ja nach der Überprüfung nix mehr machen und kann gleich wieder prüfen. Das hat dann eben zur Folge das er die Überprüfungen so schnell hintereinander macht wie es der Prozessor eben her gibt und ihn somit voll auslastet.
    Also mit dem Sleep sollts dann auf jeden Fall klappen.



  • rage_quit schrieb:

    ja indem du in das richtige sub-forum postest 😉

    indem du in das richtige sub-forum postest.

    Fixed that for you.
    🙂



  • 😮 das jetzt natürlich mega peinlich



  • rage_quit schrieb:

    😮 das jetzt natürlich mega peinlich

    Naja, macht ja nichts. Schon dahintergekommen, auf welchen Wert der Durschnitts-IQ normiert ist?
    🙂



  • mngbd schrieb:

    rage_quit schrieb:

    😮 das jetzt natürlich mega peinlich

    Naja, macht ja nichts. Schon dahintergekommen, auf welchen Wert der Durschnitts-IQ normiert ist?
    🙂

    ja, bevor ich das geschrieben hab 😉

    @edit dacht mir so viel dümmer als der durchschnitt kann ich ja nicht sein - daher schrieb ich <= 100



  • gOOOrOOO schrieb:

    Hy DaVinci,

    also warum die Prozessorlast bei dem Programm so hoch ist ist mir derzeit ein wenig schleierhaft. Ich könnt mir nur vorstellen das diese Clock-Abfrage da so rein haut, da sie wohl eigentlich dafür nicht gedacht ist.

    Huch?

    Es ist ganz egal wie lange clock() braucht.

    Wenn die CPU (besser: ein Core der CPU)

    clock()clock()clock()clock()clock()clock()clock()clock()clock()clock()...
    

    macht, wie viel Prozent ihrer (seiner) Zeit verbringt sie (er) dann wohl mit "clock()-machen"?



  • Musst Du das so verwenden oder geht auch eine andere Sprache?

    In NET gibt es den Filesystemwatcher. Der macht das alles alleine.



  • Dieser Thread wurde von Moderator/in Korbinian aus dem Forum Projekte in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


  • Mod

    Dazu braucht man kein .NET
    Siehe FindFirstChangeNotification und ff
    http://msdn.microsoft.com/en-us/library/aa364417(VS.85).aspx


Anmelden zum Antworten