[Python] Gestione del tempo.

Gabriele Battaglia iz4apu a libero.it
Sab 28 Dic 2013 15:17:58 CET


>> 
>> Ciao Manlio e grazie per avermi risposto.

>> Progetto, sviluppare una piccola applicazione console, sotto Windows,
>> con Python 2.7, che faccia da orologio per giocare a scacchi.
>> 
>> La faccenda è presto detta: 2 timer partono da un tempo definibile
>> dall'utente e scendono verso lo zero. Questi due clock si esprimono in
>> ore, minuti, secondi.
> > [...]
>> Prima domanda: come fareste voi, a fare aggiornare le variabili degli
>> orologi?
> 
> Dipende dal sistema operativo che usi.
> 
GB: provo a realizzarlo con una tecnica che gli permetta di girare sia sotto Windows che sotto Unix, ovvero anche sotto Mac OS.

>> In alcuni linguaggi, ricordo che si legava un evento allo scorrere del
>> tempo, tipo On Time Goto e poi non ci si pensava più, allo scadere
>> dell'intervallo specificato, il codice veniva eseguito.
>> Qui dovrei controllare time.clock() e, se superiore di un tot a quella
>> letta la volta precedente, chiamo il metodo delloggetto orologio che ne
>> aggiorna le variabili, giusto?
>> 
> Ci sono molte solutioni:
> 
> 1) SIGALARM su sistemi UNIX
> 2) ciclo su select con timeout, e aggiorni il tempo con time.clock
> 3) usi il timer messo a disposizione dal sistema operativo
> 4) usi il timer messo a disposizione dal tuo framework preferito
> 
GB: interessante la 2, devo approfondire studiando select perché non ho idea di cosa sia e cosa faccia. Ho deciso di usare la 3.
- userò il numero di secondi trascorso dall’avvio dell’orologi e fornito da time.time()
Affiderò ad un thread secondario il compito di aggiornare gli orologi ogni 0.3 secondi e di avvertire l’utente se uno dei 2 counters è arrivato a 00:00:00.
Al thread primario invece, affiderò il compito di ricevere i comandi dall’utente per mezzo dell’immissione di stringhe di 2 caratteri, lette da raw_input.

> 
>> Terza domanda, dovendo stampare i valori dei clocks nella console, come
>> faccio a scriverli sempre sulla stessa riga evitando così di riempire la
>> console con due colonne di cifre che scorrono verso l'alto?
>> 
> 
> Su sistemi UNIX puoi usare curses.
> Ma ci sono anche altri modi più semplici e limitati.
GB: ok, darò un occhio alla documentazione di curses ma volevo usare un metodo valido su più sistemi.
Mi accenneresti a qualcuno degli altri metodi di cui scrivevi qui sopra?

Io avevo pensato:
1. cancello tutto il contenuto della console e stampo una stringa che contiene entrambi i contatori, ad ogni secondo che passa.
2. Se esiste un carattere di controllo, o sequenza escape che simuli la pressione della freccia sù, potrei costringere la stampa sempre nella medesima riga, invece di farla scorrere verso il basso.
Grazie e ciao.
GB


Maggiori informazioni sulla lista Python