Uhr



  • Wie bekomme ich eine Uhr hin?
    Z.B. in der Konsole soll oben rechts in der Ecke eine 1 stehen und dann jede Sekunde ein hochzählen. Also wie stelle ich fest das eine Sekunde vergangen ist? (Oder eine Millisekunde). Ich habe schon gegoogelt und auch vieles gefunden, aber ich kann mit den meisten Sachen (Beiträgen) nichts anfangen. Ich hoffe Ihr könnt mir das ein wenig erklären und eine einface aber auch gute Lösung vorschlagen.


  • Mod

    Z.B. in der Konsole soll oben rechts in der Ecke eine 1 stehen

    C++ kennt keine Konsolen. Wenn du Konsolen-Graphik machen willst, musst du Plattformabhängige APIs (wie die allbekannte WinAPI) verwenden.

    Ein einfaches Beispiel, wie mann die Zeit in einen String packt und diesen ausgibt:

    #include <iostream>
    #include <ctime>
    
    int main()
    {
    	auto t = std::time(nullptr);
    	std::string str(100, '\0');
    	std::strftime( &str[0], str.size(), "%H:%M:%S", std::localtime(&t) );
    	std::cout << str << '\n';
    }
    


  • Danke für die Antwort. Aber könntest du mir die Zeilen etwas erklären?

    auto t = std::time(nullptr);
        std::string str(100, '\0');
        std::strftime( &str[0], str.size(), "%H:%M:%S", std::localtime(&t) );
    

    Oder mir einen Link geben wo ich genau das nachlesen kann?


  • Mod



  • Edit: Alles gelöscht war mist.



  • Arcoth schrieb:

    std::strftime , std::time , std::tm .

    Und natürlich: http://bit.ly/RlOUok

    danke danke!
    Aber ich vestehe es nicht (war zu erwarten...)
    Ich habe das hier

    std::strftime( &str[0], str.size(), "%H:%M:%S", std::localtime(&t) );
    

    So verstanden das daraus eine "Uhrzeit" gemacht wird. Und bei dem Rest so gar nichts 😃
    Es wäre nett wenn du mir ein paar deutsche Worte dazu sagen könntest.


  • Mod

    auto t = std::time(nullptr);
        // t wird initialisiert mit der Anzahl der Sekunden seit dem Epoch.
    std::string str(100, '\0');
        // Initialisiert einen leeren String mit hundert Zeichen.
    std::strftime( &str[0], str.size(), "%H:%M:%S", std::localtime(&t) );
        /* localtime macht aus der Anzahl der Sekunden eine Datenstruktur, die Monate, Tage, Jahre, Minuten usw. enthält. 
           Diese werden dann anschließend mittels strftime formatiert in den String geschrieben. */
    

    Zusätzlich kann das ganze noch folgendermaßen verbessert werden: Die Anfangsgröße des Strings kann locker auf zehn reduziert werden, und folgende Zeilen können auch nicht schaden:

    auto size = std::strftime( &str[0], str.size(), "%H:%M:%S", std::localtime(&t) );
    str.resize( size );
    // str.shrink_to_fit();
    


  • Okay danke!
    Jedzt habe ich noch eine Frage (die hat nur noch teilweise etwas mit der zu tun)
    Wie bekomme ich es hin das 2 "Prozesse" gleichzeitig laufen?
    Sprich, es soll ein Name eingeben werden und nebenbei soll eine Uhrzeit laufen.


  • Mod

    Ich glaube, was du suchst ist ein GUI-Toolkit. Denn so etwas kann man auf der Konsole mit Standard-C++ definitiv nicht machen (und damit wäre der Fall für dieses Board erledigt), und ob das mit der WinAPI geht weiß ich nicht - ggf. mach aber dort einen Thread auf.

    Wie bekomme ich es hin das 2 "Prozesse" gleichzeitig laufen?

    Du meinst wohl Threads.
    Seit C++11 gibt es die Klasse std::thread , welche einen separaten Thread repräsentiert. Es gibt auch std::async . Falls du dir jetzt aber Multithreading in C++11 aneignen willst, such dir ein Buch oder Google das mal.


Anmelden zum Antworten