Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [C] Countdown timer in tempo reale

    Volevo fare un coutdown in tempo reale che permettesse all'utente di vedere il tempo che gli mancava ma allo stesso tempo di poter digitare dei caratteri.
    Questa è la funzione base:
    codice:
    void countDown (int secondi){ // funzione per il conto alla rovescia
       
       
       
       if (secondi <=0)
          return;
    
       while (secondi > 0){
          printf("- %d",secondi); // mostro il contatore discendente
          Sleep(1000); // il programma dorme per un secondo
          secondi--;
       }
         
    }
    Ho fatto vari tentativi usando tipo kbhit() ma non sn riuscito.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Se lo Sleep ferma il thread per un secondo, il processo non risponderà per quel secondo.

    E dove sta la kbhit ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    no diciamo che quella era la versione da cui volevo partire.. volevo eseguirla nel main mentre l'utente doveva inserire la parola per cui il ciclo con la kbhit() lo avevo nel main.. lo sleep lo usavo per fermare il processo per un secondo e infatti non risponde

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Usa un thread separato per il conteggio.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Originariamente inviato da nasuka89
    no diciamo che quella era la versione da cui volevo partire.. volevo eseguirla nel main mentre l'utente doveva inserire la parola per cui il ciclo con la kbhit()
    Per quale OS ti serve?

  6. #6
    provo se riesco a fare un thread separato allora..
    mi serve per windows

  7. #7
    Originariamente inviato da nasuka89
    provo se riesco a fare un thread separato allora..
    mi serve per windows
    Allora prova a dare un'occhiata al codice che segue. Non è completo (anche se compila), però dovrebbe darti un'idea su come generare il countdown e soprattutto come visualizzarlo nello stesso punto a video. Non fa uso di thread secondari.


    codice:
    #include <stdio.h>
    #include <conio.h>
    #include <windows.h>
    
    HANDLE sout;
    
    void print_timer(int secs)
    {
        CONSOLE_SCREEN_BUFFER_INFO sbi;
        COORD c;
    
        GetConsoleScreenBufferInfo(sout, &sbi);
    
        c.X = 40;
        c.Y = 5;
        SetConsoleCursorPosition(sout, c);
    
        printf("%5d", secs);
    
        SetConsoleCursorPosition(sout, sbi.dwCursorPosition);
    }
    
    int main()
    {
        int secondi, esci, c;
        DWORD t1 = 0, t2;
        sout = GetStdHandle(STD_OUTPUT_HANDLE);
    
        secondi = 10 + 1;
        esci = 0;
    
        while ((secondi > 0) && (esci == 0))
        {
            t2 = GetTickCount();
            if ((t2 - t1) >= 1000)
            {
                print_timer(--secondi);
                t1 = t2;
            }
    
            if (kbhit())
            {
                c = getch();
                if (c == 0x0D)
                    esci = 1;
                else
                    printf("%c", c);
            }
        }
    
        if (esci)
            printf("\n\nOK");
        else
            printf("\n\nTEMPO SCADUTO");
    
        getch();
    
        return 0;
    }

  8. #8
    ESSE-EFFE grazie delle dritte

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.