Stavolta ragioniamo su: timers virtuali

Stavolta vorrei ragionare su di un argomento un pò più tecnico, una problematica spesso affrontata da chi si occupa di firmware o software RT in genere: i timer virtuali.

Il problema è questo: si dispone di una singola fonte d'interrupt periodico (ad esempio un tick ogni decimo di secondo) e tramite questa si vuole implementare un sistema di timer virtuali.

Vediamo le API di questo ipotetico sistema di timers:


//
// Questa funzione viene invocata ogni decimo di secondo sotto interrupt.
void Tick(void)
{
// Qua dentro gestisco la temporizzazione dei timer.
}

//
// Funzione per attivare un timer virtuale.
// Imposta un timer con tempo "Time", allo scadere del tempo
// verrà invocata la funzione CallBack() e il timer si disattiva.
void SetTimer(DWORD Time, void (*CallBack)(void))
{
// Qua dentro creo un nuovo timer virtuale.
}


Il problema è che si vorrebbe ottenere di poter avere un numero ampio di timer virtuali "running" e si dovrebbe operare su N timer virtuali senza perdita d'efficienza mano a mano che si attivano molti timer.

Vediamo chi riesce a concepire la migliore struttura dati per gestire efficientemente una situazione di questo tipo
Non è indispensabile scrivere tanto codice, basta spiegare anche a parole.
Uhm, troppo complicato ? passiamo a qualcosa di più semplice tipo "Barbie, gira la moda" ?

Il discorso dei timer virtuali non è casuale, servirà ad introdurre una ben specifica struttura dati.

[ 27-03-2001: Message edited by: Herpes ]
si ma kosa me ne faccio?
bhe??
Vuoi sapere a che serve un meccanismo di timer virtuali ?
Beh, immagina di dover schedulare eventi in una tua applicazione in tempi diversi, il numero/ordine degli eventi non lo puoi limitare a priori.
Ad esempio un video game, devi gestire una serie di animazioni e/o eventi in tempi precisi:
- 100msec omino uno comincia a saltare.
- 500msec omino due spara un proiettile
- 800msec omino uno riatterra
- ogni 200 msec aggiornamento stato degli oggetti e della rete (è un gioco multiplayer )
ecc ecc

Il meccanismo di timer virtuali ti permette di schedulare un numero illimitato di eventi ed avere timing precisi per le animazioni.
I tempi come te li calcoli ? con i loop ? chiaro che no, serve un meccanismo preciso, asincrono e indipendente dal clock del sistema.
Ho un pò banalizzato ma spero sia chiara l'importanza di un meccanismo di questo tipo per chi progetta software destinati a funzionare in real time.

Dai che siamo ancora sul facile la prossima volta cominciamo a parlare di codice multithreaded e sicronizzazione fra processi.

[ 28-03-2001: Message edited by: Herpes ]
ho capito.


ma se io non programmo a ke mi serve?
Ahaha buona questa

Beh allora

Se sei programmatore jedi oscuro: lo sai già
Se programmi: ti serve.
Se t'interessi vagamente di programmazione: impari qualcosa.
Se non t'interessi di programmazione: che ci fai qua ?

Comunque questa cosa non ha avuto seguito pare, la chiudiamo qua.
herpes è troppo complicata perchè possa avere successo