Visualizzazione dei risultati da 1 a 10 su 10

Discussione: [C] Countdown timer

  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    15

    [ C ] Domanda semplice semplice

    Sono un principiante e sto programmando un countdown timer.
    Vorrei usarlo in altre applicazioni (giochi) ma quando lo faccio partire si apre la finestrella del dos occupando il 100% della cpu!
    E' possibile avviarlo come una normale applicazione di windows per risparmiare un sacco di risorse? Come faccio? Volete il sorgente?

    Non ridete please

  2. #2
    Utente di HTML.it L'avatar di Poker1
    Registrato dal
    Jul 2002
    Messaggi
    479
    Posta il sorgente e' meglio
    Non riscrivere la ruota, usa le librerie.
    by Bjarne Stroustrup
    EIDON SOFT MEMBER

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    15
    Eccolo qui
    Mi pare impossibile che un programmino così insulso
    mi faccia rallentare (parecchio) il sistema.


    #include <stdio.h>
    #include <time.h>
    #include <windows.h>
    #include <mmsystem.h>
    #include <conio.h>

    void aspetta ( int seconds )
    {
    clock_t fine;
    fine = clock () + seconds * CLK_TCK ;
    while (clock() < fine) {}
    }

    int main ()
    {
    int n;
    printf ("Inizio conto alla rovescia...\n");
    for (n=10; n>0; n--)
    {
    printf ("%d\n",n);
    aspetta (1);
    }
    PlaySound("esplosione.wav",NULL,SND_FILENAME|SND_A SYNC);
    getch();
    return 0;
    }

  4. #4
    Utente di HTML.it L'avatar di ibykos
    Registrato dal
    Feb 2005
    Messaggi
    201
    Il sistema che usi per la tua funzione aspetta è anche detto "busy form of waiting", cioè, nonostante il tempo d'attesa sia considerato un tempo morto, la cpu viene impiegata al 100% dal tuo programma.
    Questo modo di operare va bene solo in alcuni ambiti (in cui il tempo d'attesa è brevissimo), invece nel tuo conviene implementare un contatore che non consuma (quasi) cpu.
    Un possibile schema implementativo è questo

    codice:
    void countDown (int secondi){
       
       if (secondi <=0)
          return;
    
       while (secondi > 0){
          printf("- %d",secondi); // mostro il contatore discendente
          sleep(1000); /*il programma dorme per un secondo*/
          secondi--;
       }
    }
    La funzione sleep permette al sistema operativo di cambiare lo stato del programma da running a suspended blocked, in modo tale da non fargli sprecare CPU.

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    15
    Caspita

    Grazie mille!!!

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    15
    Problema

    Usando la funzione sleep e facendo l'include di <iostream.h> (ma anche di <iostream>), il file non si compila e mi dice:

    32:2 C:\Programmi\Dev-Cpp\include\c++\3.4.2\backward\backward_warning.h #warning This file includes at least one deprecated or antiquated header. Please consider using one of the 32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting the <X> header for the <X.h> header for C++ includes, or <iostream> instead of the deprecated header <iostream.h>. To disable this warning use -Wno-deprecated.

    15 C:\...... `sleep' undeclared (first use this function)

    Help

  7. #7
    Utente di HTML.it L'avatar di Aki
    Registrato dal
    Dec 2002
    Messaggi
    2,206
    Originariamente inviato da duobutch
    Problema

    Usando la funzione sleep e facendo l'include di <iostream.h> (ma anche di <iostream>), il file non si compila e mi dice:

    32:2 C:\Programmi\Dev-Cpp\include\c++\3.4.2\backward\backward_warning.h #warning This file includes at least one deprecated or antiquated header. Please consider using one of the 32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting the <X> header for the <X.h> header for C++ includes, or <iostream> instead of the deprecated header <iostream.h>. To disable this warning use -Wno-deprecated.

    15 C:\...... `sleep' undeclared (first use this function)

    Help
    ciao,
    puoi usare la funzione usleep(ms) che è inclusa in unistd.h

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    15
    Ho fatto #include <unistd.h> ma l'errore è uguale

    15 C:\.... `usleep' undeclared (first use this function)

    Cambio compilatore? Uso Dev-C++

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Se stai lavorando con Windows, la usleep non esiste.

    Devi usare la funzione Sleep (con la S maiuscola) e includere il file <windows.h>

    Il parametro e' espresso in millisecondi, quindi

    Sleep(1000);

    per attendere un secondo

  10. #10
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    15
    Funziona a meraviglia

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.