Newsgroup: it.comp.lang.delphi
Titolo: Questione di "timer"

Salve amici,stavolta il problema è "grossino"...i timer che non sò quando 
farli partiire...ma vi faccio una panoramica della situazione...
1) Form con 2 tasti  (chiamati "start" e "stop") e 2 timer (chiamati 
"scansione" e "pausa"), più tutto il resto del progetto (che non ci 
interessa)
2) Strumento (ricevitore/scanner) collegato sulla seriale che spara dati al 
mio sw (e lo gestisco che è "'na bellezza" con componenti vari)
3) Lo strumento viene impostato in base a dei valori presi da un dataset (in 
pratica imposto la frequenza di sintonia)
4) Quando su una frequenza non c'è segnale, scorro il dataset e imposto (per 
ogni cambio riga) la frequenza sullo strumento
5) Il componente che si occupa della comunicazione con la seriale, mi 
fornisce CONTINUAMENTE dati dallo strumento, e cosa FONDAMENTALE, mi dà lo 
stato di presenza segnale (questa è una variabile che nel progetto ho 
chiamato "squelch"); lo squelch è a TRUE se c'è segnale e FALSE se non c'è 
segnale.
Quel che devo fare è semplice, alla presenza di segnale (squelch=true), devo 
aspettare che questo sparisca (squelch=false),aspettare "n" secondi 
(impostati nel timer "pausa") e iniziare nuovamente con l'incremento nel 
dataset SE non si presenta nuovamente un segnale prima dello scadere della 
pausa (se ciò avvenisse,la pausa deve essere ripartire dallo scadere del 
segnale).
Detta in soldoni...non devo scorrere il dataset finchè non ho silenzio per 
"pausa.interval" millisecondi, una volta che ho raggiunto quella soglia di 
pausa, devo iniziare  a scorrere nuovamente il dataset.
Il timer "scansione" non fà altro che scorrere il dataset.
Non sò però come gestire gli eventi, che a quanto sono riuscito ad 
"analizzare" sono 3:
OnTimerScansione,OnTimerPausa,OnRicevidati   (OnRiceviDati, è scatenato 
continuamente in ricezione, ma fondamentale perchè setta la variabile 
"squelch" che ci dice se stiamo "sentendo" qualcosa oppure no).
Credo che le linee di codice siano poche, ma non riesco proprio a 
"sgarbugliare" l'"intrigo" degli eventi/settaggio stati dei timer.
Qualche dritta?
Michele

 "analizzare" sono 3:
Se usi i thread, ogni thread è specializzato nel suo compito.  Ad ogni
thread si parla mediante messaggi specifici.  Tutto qui.  Il worker
thread, a sua volta, comunicherà alla finestra dell'applicazione che
interessa i dati da far vedere a video (sempre mediante messaggi).
La comunicazione con i messaggi, tra thread, è la più sicura e semplice da
implementare.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 implementare.
Semplice per me non direi....ma mi documenterò.

 della ricezione (leggo tutto il buffer, e setto le labels...)
E questo è sbagliato, rischi di perdere informazioni che arrivano
dall'hardware.  Tu devi avere il thead primario dell'applicazione, che è
quello normalmente creato da Windows, poi il thread "listener/dispatcher"
in ascolto sulla porta (con priorità altissima), poi il worker thread di
elaborazione delle informazioni che arrivano dal listener:
T1 (primario) <----- T2 (worker thread) <---- T3 (listener)
T3 che ha priorità più alta è in ascolto costante sulla porta, quando
riceve qualcosa esegue il dispatch delle informazioni nella coda di
messaggi di T2, T2 a mano a mano scoda la sua coda, elabora le
informazioni e comunica a T1 che cosa far vedere (sempre mediante
messaggi).


 farli partiire...ma vi faccio una panoramica della situazione...
Di che ordine di grandezza (range) e' la pausa?
Giorgio 

> Di che ordine di grandezza (range) e' la pausa?
da 1 a 10 secondi (in step di 1 secondo impostabili ad inizio "scansione") 

 da 1 a 10 secondi (in step di 1 secondo impostabili ad inizio "scansione")
Chiarisciti le idee sugli eventi:
1- l'off-on dello squelch
2- l'on-off dello squelch
3- l'evento del Ttimer il cui time e' impostato al valore della pausa
Scrivi il codice per "catturare i primi due eventi, fatto cio' manca solo la 
loro gestione: cosa fare ad ogni ben preciso evento.
Giorgio