PDA

View Full Version : [Principiante] Countdown Timer


duobutch
19-12-2005, 09:22
Mi serve un aiuto per capire come programmare un semplice timer countdown senza interfaccia grafica e senza fronzoli.
Dovrebbe iniziare il conto alla rovescia quando si preme invio, e se arriva a zero esegue un suono .wav, e deve funzionare usando qualsiasi altro programma.
Con quale linguaggio è più facile programmarlo tra java e c++?
Esiste già? E' complesso/Servono parecchie linee di codice? :doh:
Grazie :)

sottovento
19-12-2005, 09:39
Ciao,
ovviamente in C puoi trovare praticamente qualsiasi cosa, ed anche delle librerie per fare questo timer. Naturalmente dovrai cercare quella adatta alla tua piattaforma (Win? Linux? Unix? ...).

In Java esistono i timer (anzi, ne esiste piu' di uno) e sono gestiti in maniera standard.

I piu' utilizzati sono:
java.util.Timer

e
javax.swing.Timer

Quest'ultimo prevede che ci sia un'interfaccia grafica. Con questa premessa e' estremamente semplice da usare (ti basta implementare la ActionListener), comunque anche l'altro ha caratteristiche di semplicita' (dovrai estendere TimerTask).

High Flying
Sottovento

duobutch
20-12-2005, 09:21
Grazie!
Altra domanda, una volta finito il programma è sicuro che funziona mentre sono in esecuzione giochi, office o altro?
Oppure bisogna scrivere del codice apposito?

cionci
20-12-2005, 10:02
Facci vedere come l'hai implementato...l'importante è che non ci sia un'attesa attiva...

duobutch
20-12-2005, 13:43
Sono ancora in alto mare, il compilatore mi dice
"[Linker error] undefined reference to `PlaySoundA@12' "
a parte questo non ho idea di come far partire il countdown premendo il tasto "enter"..
cmq per adesso il codice è questo:




/* Conto alla rovescia */
#include <stdio.h>
#include <time.h>
#include <windows.h>
#include <mmsystem.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_ASYNC);
return 0;
}

Help :)

kk3z
20-12-2005, 14:03
Devi linkarti al file winmm.lib o libwinmm.a dalle impostazioni del tuo progetto

cionci
20-12-2005, 16:01
/* Conto alla rovescia */
#include <stdio.h>
#include <time.h>
#include <windows.h>
#include <mmsystem.h>

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

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_ASYNC);
return 0;
}

Oltre a linkare la libreria detta da kk3z linka anche Kernel32.lib (o libkernel32.a se usi un compilatore derivato da gcc)...

duobutch
21-12-2005, 12:40
Detto fatto, così funziona, grazie!
Il problema principale ora è farlo funzionare non in una finestra dos
(che mi rallenta notevolmente il pc, il processore diventa occupato al 100% :confused: ), ma in una di windows.

Ci sto lavorando sopra, cmq se arrivano suggerimenti tanto meglio ;)