??? Echtzeituhr in einem Konsolenprogramm einbauen ???



  • Hallo zusammen,

    ich schreibe gerade ein Konsolen-Programm unter Linux (Ubuntu), mit dem man wichtige Daten, z.B. Account-Daten (Benutzer/Passwörter) verschlüsselt abspeichern und wieder abrufen kann. Im Programm ist es auch möglich mehrere Benutzer anzulegen, die jeweils ihre Daten sicher abspeichern und abrufen können. Nun habe ich aber folgendes Problem. Ich möchte gerne noch eine Echtzeit-Uhr in das Programm einbauen. Praktisch soll die Uhrzeit ständig angezeigt werden mit Sekunden. Aber ich weiß nicht so genau wie ich das umsetzen soll.
    Ich habe mal folgendes kleines Programm geschrieben um zu demonstrieren, wie das ungefähr aussehen sollte bzw. könnte. Doch so wird das in der Praxis sicherlich nicht gemacht, denke ich mal. Bin was Programmierung angeht noch in der Lernphase und leider noch nicht so erfahren. Nun erstmal der Code:

    /* clock.c */
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <unistd.h>
    #define  clrscr() 	printf("\033[2J")
    #define  pos( x, y )  printf("\033[%d;%dH", x, y)
    
    int main()
    {
        time_t dat_clock;
        struct tm *zeitInfo;
        char   puffer[ 80 ];
    
        clrscr();
    
        while( 1 )
        {
    	    sleep( 1 );
        	time( &dat_clock );
        	zeitInfo = localtime( &dat_clock );
        	pos( 1, 1 );
        	strftime( puffer, 80, "\nUhrzeit: %X | Datum: %x | Tag: %A", zeitInfo );
        	fputs( puffer, stdout );
        }
    
        return EXIT_SUCCESS;
    }
    

    Meine Frage ist, wie könnte ich eine Funktion schreiben, die eine Echtzeit-Uhr anzeigt und zwar so, dass es keinen Einfluss auf den restlichen Programmablauf hat. Damit meine ich, dass man zwischen den Menüs im Programm hin und her springen kann und die Uhrzeit mit Datum usw. an einer ausgewählten Stelle schön immer mit läuft? Das müsste doch umsetzbar sein, oder? 😕

    Würde mich über ein paar Tipps von euch sehr freuen.

    Gruß Peter 🙂



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C (C89 und C99) in das Forum Linux/Unix verschoben.

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

    Dieses Posting wurde automatisch erzeugt.


  • Mod

    Eine Möglichkeit die sich anbieten würde, wäre, einen Thread dafür zu erstellen. Aber mehrthreadige Programmierung, selbst wenn es solch ein einfaches Beispiel ist, ist vermutlich noch etwas zu hoch für dich. 😞



  • SeppJ schrieb:

    Eine Möglichkeit die sich anbieten würde, wäre, einen Thread dafür zu erstellen. Aber mehrthreadige Programmierung, selbst wenn es solch ein einfaches Beispiel ist, ist vermutlich noch etwas zu hoch für dich. 😞

    Okay, dachte ich mir schon, dass es nicht so einfach werden würde. Mit mehrthreadige Programmierung habe ich mich auch noch gar nicht auseinander gesetzt. Naja schade. Okay, trotzdem vielen Dank. 😉
    Gruß Peter



  • Okay, habe mal ein kleines Testprogramm zusammengebastelt. Habe einen Thread für die Uhrfunktion erstellt. Allerdings bin ich mit dem Ergebnis nicht so zufrieden. Das Problem ist eben, dass der Cursor logischerweise in einer Schleife an die gewünschte Stelle springt um die aktuelle Uhrzeit auf dem Bildschirm auszugeben. So gestaltet es sich ziemlich schwer eine einfache Eingabe zu programmieren.
    Hättet ihr vielleicht ein paar Tipps für mich? Hier mal der Quellcode meines Testprogamms:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <stdarg.h>
    #include <time.h>
    #include <pthread.h>
    #include "conio/conio.h"
    
    #define  clrscr()       printf("\033[2J")
    #define  pos( x, y )    printf("\033[%d;%dH", x, y)
    
    void *uhrzeit( void *val );
    char *no_enterKey( char * );
    
    void *uhrzeit( void *val )
    {
        time_t      dat_clock;
        struct tm   *zeitInfo;
        char        puffer[80];
    
        while( 1 )
        {
            sleep( 1 );
            pos( 3, 4 );
            time( &dat_clock );
            zeitInfo = localtime( &dat_clock );
    
            strftime( puffer, 80, "\n\tUhrzeit: %X", zeitInfo );
            fputs( puffer, stdout );
        }
    }
    
    char *no_enterKey(char *str)
    {
        int len;
        len = strlen(str);
        if(str[len-1] == '\n')
            str[len-1] = '\0';
    
        return( str );
    }
    
    int main()
    {
        pthread_t thread_1;
        int rc;
        char puffer[80];
    
        clrscr();
    
        rc = pthread_create( &thread_1, NULL, uhrzeit, NULL );
    
        if( rc != 0 )
        {
            printf("Thread_1 konnte nicht erzeugt werden!!!\n");
            return EXIT_FAILURE;
        }
    
        pos(  8, 1 );
        printf("Wie heisst du? ");
        pos(  9, 1 );
        fgets( puffer, 80, stdin );
        no_enterKey( puffer );
        pos( 12, 1 );
        printf("Hallo %s.", puffer);
        getch();
    
        pthread_cancel( thread_1 );
        pthread_join( thread_1, NULL );
    
        clrscr(); pos( 1, 1 );
    
        return EXIT_SUCCESS;
    }
    

    Gruß Peter 🙂


Anmelden zum Antworten