Newsgroup: it.comp.lang.visual-basic
Titolo: [?] Domanda su timer multipli

Eccomi qua con un dubbio....
sto sviluppando un motore che ha lo scopo di gestire lo scambio di dati fra
la mia applicazione e un'altra. Lo sto facendo configurabile al massimo, in
modo da poterlo utilizzare per collegarmi a qualunque (o quasi :-P ) altro
programma.
Questo motore deve gestire molti "tipi" di dati, dalle anagrafiche ai dati
di produzione e allora ho pensato di lasciare la possibilità di abilitare
singolarmente i vari processi di allineamento, ognuno con un intervallo
diverso (più volte al giorno, una volta al giorno ecc.)
Per fare ciò ho scritto una classe Processo che, con tutti i suoi bei
parametri si occupa di aggiornare i dati sul db.
Il problema ora è gestire le temporizzazioni.
Siccome i processi che possono esistere contemporaneamente sono una decina,
vorrei evitare di piazzare 10 controlli Timer sul form, e allora ho optato
per l'utilizzo delle API SetTimer e KillTimer.
Il problema è che non mi viene in mente un metodo per tenere legata
un'istanza della mia classe con la relativa istanza del timer, dato che non
posso aggiungere un parametro alla funzione richiamata con l'AddressOf.
Qualcuno ha un suggerimento, oppure mi conviene lasciar perdere le API e
affidarmi ai controlli Timer?
Spero di essere stato spiegato :)
grazie
ciaociao

 perdere le API e affidarmi ai controlli Timer?
io metterei un unico timer, o api o controllo vedi tu come ti torna più
comodo. questo aggeggio non dovrebbe far altro che informare il programma
del trascorrere del tempo, a ogni tic del timer, una sub apposita controlla
se è il momento o meno di fare qualcuna delle operazioni programmate.
-- 
Salutoni
Sergio
per rispondere... togli il group dall'indirizzo

 operazioni programmate.
Quindi, se ho capito, potrei aggiungere una property alla classe dove salvo
l'ora dell'ultima esecuzione e, ogni volta che il timer scatta, faccio un
ciclo su tutte le istanze della classe, controllo se il tempo trascorso
dall'ultima esecuzione corrisponde all'intervallo imopostato ed eseguo la
procedura.
L'unica cosa è che così sono costretto a tenere l'intervallo del timer molto
basso, e di conseguenza a fare molti cicli di controllo inutili
ciaociao

 inutili
Io non farei cosě....
Metterei l'Interval dell'unico Timer al valore minimo (il piů basso fra
tutti quelli previsti) e nell'evento Timer1_Timer conterei/sommerei tale
valore un una variabile globale (o, se preferisci, in tante variabili quanti
sono gli pseudo-timer gesti). Poi ne testerei il valore per capire quali/i
funzioni chiamare, in relazione ai rispettivi tempi.

 relazione ai rispettivi tempi.
mmmm....
stavo scrivendo la stessa cosa mentre rispondevo a Sergio, ma poi ho pensato
che così facendo non sarei molto preciso nel lanciare le procedure.
Se ad esempio ho 2 processi attivi, 1 deve partire ogni 4 ore, l'altro una
volta al giorno alle ore 14:30, ok?
Se il processo delle 4 ore parte alle 14:20, quello delle 14:30 partirà alle
18:20......
ciaociao

 fra  tutti quelli previsti) [...]
Non basta il valore minimo, bisogna mettere il reciproco del minimo comune
multiplo dei rerciproci :)
es:
voglio eventi ogni:
-1/2 di secondo
-1/5 di secondo
-1/4 di secondo
-1/7 di secnodo
i reciproci sono 2,5,4,7
il MCM č 7*5*4=140
il reciproco del MCM č 1/140
il timer reale deve scattare ogni 1/140 di secondo.
Ogni singolo timer virtuale scatta con la procedura che hai indicato ma ogni
MCM*frequenza esempio il timer vistruale da 1/5 scatta ogni 140*1/5=28 volte
che scatta il timer reale.
termoPilucco

[Marg = 
circa...@inwind.it
 in
c6lra6$bsas7$
1...@ID-193795.news.uni-berlin.de
] ha scritto:

No, perchè (salvo durate esagerate delle singole funzioni, vedi il 3d di
termo sulle chiamate asincrone) il timer scatta comunque. Dovresti evitare
(o rimandare, disabilitando il timer se una funzione avviata dallo stesso
non è conclusa) di avere intervalli più brevi della durata minima di una
funzione.

 MCM*frequenza esempio il timer vistruale da 1/5 scatta ogni 140*1/5=28
volte
[...]
Vistruale?
Se io fossi una ragazza capirei anche...
termoPilucco,

 inutili
beh... dipende da quanto è pesante il controllo che devi fare, e anche qual
è la tua esigenza in merito alla precisione. io farei un intervallo di 10
minuti, standard. tieni comunque conto che se il programma sta facendo altro
l'evento del timer potrebbe sballare.


 durata minima di una funzione.
Ti riferisci al fatto che non posso superare un certo numero di millisecondi
nella proprietà interval?
Perchè altrimenti non è vero ciò che affermi...
Tu dici di impostare l'intervallo del timer = al minimo intervallo previsto,
giusto?
Di conseguenza nell'esempio che ti ho fatto il mio intervallo sarà impostato
a 4 ore, ok?
Quindi, se il timer scatta ogni 4 ore, e quarda caso proprio 10 minuti prima
dell'ora stabilita per il processo giornaliero, tale processo rimane in
attesa fino al prossimo scatto del timer, cioè 3 ore e 50 minuti dopo l'ora
prevista, sbaglio?
ciaociao

 programma sta facendo altro l'evento del timer potrebbe sballare.
La sfiga è proprio che per alcuni dati l'aggiornamento può essere richiesto
ogni minuto, mentre per altri anche solo una volta al giorno.....
ciaociao

 
Un timer con intervallo di 1 minuto o 5/10 minuti non e' che sprechi 
troppa cpu. Io ho usato questo metodo sia con classi contenenti l'ora in 
cui eseguire una operazione, sia con lo stesso dato memorizzato in una 
tabella di un db.
Funziona egregiamente.
Unica accortezza: la gestione dell'ora zero!
ciao
	maxx
-- 
NOSPAM: Rimuovere i trattini dallo username!
Cut hyphens from my username!

 termoPilucco
ciaociao


[...]
Quindi riassumendo, pare che la soluzione migliore resti comunque l'utilizzo
di un controllo Timer, e del ciclo sulle istanze della classe.
Bene, ora finisco di scrivere il metodo per l'aggiornamento delle
anagrarfiche e poi gli rompo un po' i maroni per vedere come si comporta....
grazie a tutti
ciaociao

 ciaociao


Infatti penso che alla fine farò così.
Ah, un ultimo dubbio (così magari evito un po' di ricerche... :-P ), meglio
il Timer a questo punto, o le API?
Cosa ciuccia di meno?
ciaociao

 meglio il Timer a questo punto, o le API?
Per API intendi la GetTick o giù di lì?
Non lo so, mai usata. Io, visti i tempi dilatati e gli intervalli per nulla
bassi (quindi, complessivamente, una necessità di precisione piuttosto
ampia), userei il Timer (controllo, non la funzione che ha il problema della
mezzanotte)..., ma non sono in condizioni di mettere la mano sul fuoco.

 


 mettere la mano sul fuoco.
Credo che userò quello comunque.
Mi pare di ricordare adesso di aver letto da qualche parte che c'è
pochissima differenza tra le risorse occupate dal controllo e quelle
occupate dalle API quindi, per non complicarmi inutilmente la vita, opto per
il controllo! :-P
ciaociao

 maxx
ciaociao

 ciaociao
sì, era da qualche parte in un "mio" thread.....quando dovevo muovere su un
form diversi oggetti per il gioco che stavo sviluppando.....cattivo,
proiettile, tempo che scorre, tutto comandato (nella prima release) da un
solo timer che gestiva il tutto....
<spam>
    <nome>Keyzard</nome
    <url>
http://www.igordamiani.it/keyzard
</url>
</spam>
:-))) good coding!!!
-- 
Alletun
"Se ti va di spassartela adesso
Prendi il Vettore oggi stesso."
Terre Desolate - Stephen King

 :-))) good coding!!!
Ci ho già giocato, cosa credi!
Molto carino, complimenti
ciaociao