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 istifstream 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 peinlichNaja, macht ja nichts. Schon dahintergekommen, auf welchen Wert der Durschnitts-IQ normiert ist?

-
mngbd schrieb:
rage_quit schrieb:
das jetzt natürlich mega peinlichNaja, 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.
-
Dazu braucht man kein .NET
Siehe FindFirstChangeNotification und ff
http://msdn.microsoft.com/en-us/library/aa364417(VS.85).aspx