Zeitvergleich Fehlerhaft und zugriff auf Programm nicht möglich.



  • Hallo,
    hier mein code:

    void check()
    {
     String lese;
     String x;
     fstream datei("zeit.txt");
     if (datei.good())
     {
     datei.close();
     TStringList *list = new TStringList();
     list->LoadFromFile("zeit.txt");
     lese = list->Text.c_str();
     }
     datei.close();
    
     for (int i = 1; i<= 5 ; i++ ) {
    	 x = x + lese[i];
     }
    
     String dtime = Form3->DateTimePicker1->DateTime;
     String datum = Date();
    
     while (dtime != x)
     {
    	datum + dtime = Now();
    	 Sleep(60);
     };
    
     Form1->Show();
    
    }
    

    Habe hier kleine Fuktion geschrieben der aus der Datei die Uhrzeit (HH:mm) auslesen soll und das mit der Uhrzeit(HH:mm) vergleicht.
    Wenn die Zeit(aus der Datei) mit der Aktuelle Zeit gleich ist soll er zu den nächsten Schritt.
    Problem 1 die while Schleife funktioniert nicht und zweitens ist das Programm

    Form1->Hide();
    

    mit eine andere Funktion. Wenn ich dann das Programm wieder Zeigen möchte, funktioniert es nicht weil er in der schleife hängt.
    Und der Sleep code geht auch nicht.
    Ich hoffe ihr könnt mir helfen eine Bessere funktionierende Funktion zu schreiben.

    Vielen Dank im Voraus.



  • Was soll denn "datum + dtime = Now();" deiner Meinung nach bewirken?

    Außerdem ist dein Code sehr eigenartig:
    - du checkst, ob du die Datei sowohl lesend als auch schreibend öffnen kannst, dann schließt du sie (zweimal) und dann lädst du die Daten mit LoadFromFile (du solltest lieber mit try...catch die mögliche Ausnahme abfangen).
    - das Mischen von STL- und VCL-Funktionalität ist meist keine gute Idee

    - du greifst in deiner globalen Funktion auf andere globale Variablen (Form1, Form3, etc.) zu, du solltest diese lieber als Parameter übergeben.

    - die for-Schleife kannst du dir sparen und stattdessen (Ansi)String::SubStr() verwenden

    - während der while-Schleife hängt dein gesamtes Programm, da du es ja schlafen legst (ansonsten s. Application->ProcessMessages())

    - und den Zeitvergleich solltest du direkt mit dem Datentypen TDateTime ausführen, nicht mit Strings (dann aber mit kleiner-gleich).

    - ...

    - unterteile Funktionalität in sinnvolle Unterfunktionen (bzw. besser Methoden einer Klasse)



  • also einiges an deinem Quellcode ist im Argen:

    1. was soll das denn?

    lese = list->Text.c_str();
    

    was mach c_str() ? und brauchst du es wirklich?

    2. wozu die For-Schleife? wenn du genau weißt wie lang dein String ist nimm SubString

    String dtime = Form3->DateTimePicker1->DateTime;
    

    schau mal im Debugger was danach in dtime steht, wahrscheinlich etwas wie "dd.mm.yyy hh🇲🇲ss"

    4. was soll das bringen?

    datum + dtime = Now();
    

    5. schau doch mal welchen Wert Sleep verlangt. wielange sind 60 Millisekunden?

    [Edit] etwas zu langsam...



  • Leute Danke für den Feedback.
    Ich weiss doch das der Code auf gut Deustch sche.. ist, deswegen habe ich doch hin geschriben mit der Hoffnung das mir jemand vielleicht eine bessere möglichkeit kennt.

    Ja ich weiss die Codes habe ich frühen Morgen teil für teil geschribene weil es nicht lief.
    Wurde mich freuen wenn ihr mir weiter hilft.

    Danke.



  • Wir haben dir doch genug Hinweise gegeben - setz die doch erst mal um und dann kannst du immer noch nachfragen, falls etwas nicht läuft.
    Wir wissen ja noch nicht einmal, in welchem Zusammenhang du die Funktion 'check()' aufrufst (bzw. welchen Sinn das ganze machen soll)?


Log in to reply