Newsgroup: it.comp.lang.visual-basic
Titolo: Operazioni multiple.....

Ho costruito un programma che comunica con uno strumento , dal quale legge
alcuni dati e li visualizza.
Ora devo aggiungerci anche la costruzione di un grafico per le grandezze
lette.
Per fare cio' devo andare a salvare ogni 4 o 8 secondi un file al quale
vengono continuamente aggiunti i valori di queste grandezze all'istante del
salvataggio.
Come posso fare per essere sicuro della regolarita' della frequanza del
salvataggio?
DEvo per forza costruire un' applicativo multithread?
Dimenticavo.....il tutto e' stato sviluppato con VB6.....
Ogni consiglio sara' benvenuto!!!!
ciao
Federico

 ha scritto nel messaggio
news:banru1$ih6$1...@lacerta.tiscalinet.it...

forse non ho capito bene ma se usi un timer e lo setti su 4 o 8 secondi come
dice tu e esegui la procedura di salvataggio sul file .?
fai delle prove scrivendo anche l'orario esatto di partenza del salvataggio
e la fine dello stesso.
ciao Ilario

 ha scritto nel messaggio
news:bao1o4$mcd$1...@lacerta.tiscalinet.it...


 DEvo per forza costruire un' applicativo multithread?
Basta un semplicissimo timer, ma ricorda che in un sistema operativo 
multitasking non hai nessuna certezza sul rispetto dei tempi.
Ciao.
-- 
BSD is for UNIX lovers -- linux is for Windows haters.

fai una prova quando leggi i valori ( ogni quanto li legge?), li inserisci
in una griglia con anche il tempo di inizio lettura e fine lettura, poi
controlla i tempi
tipo     inizio     valore a       valore b     valore c     fine
         15:01:02      10               12            15         15:01:03
         15:01:06      14                 9              7         15:01:07
         15:01:10      16               89            18         15:01:11
         15:01:14      18               13            21         15:01:15
in questo modo sai se li ha inseriti nel tempo esatto o no e magari puoi
correggere il tempo del timer magari diminuendo di un secondo ( e' solo un
ipotesi)
poi se non ti servono salvati obbligatoriamente ogni 4  sec perche li devi
rileggere ogni volta , li puoi salvare ogni tot secondi o ogni tot righe
ciao Ilairo

Ed e' proprio questo il punto che mi interessa...il rispetto dei tempi....
"H.P.L." <u...@vaila.ble> ha scritto nel messaggio
news:slrnbcv3...@aidee.softshark...


 Ed e' proprio questo il punto che mi interessa...il rispetto dei tempi....
In un SO multitasking non hai nessun modo per avere la certezza del rispetto 
dei tempi. Puoi solo avere una buona probabilitą che vengano rispettati
evitando di eseguire altri programmi sul PC, in modo che il SO dedichi
le risorse prevalentemente al tuo. Ma in ogni caso la certezza non la
puoi avere.


Infatti ....nel mio programma ci sono 2 timer...uno per leggere dallo
strumento...e uno per salvare i dati letti su un file.....e chiaramente...se
ci sono delle sovrapposizioni di intervento dei timer...chiaramente una
delle due procedure deve accodarsi....giusto?
Ma se cosi' fosse....trovo strano che andando a guardare i tempi delle
registrazioni sul file....me le trovo precisamente con passo di 4 -6-4-6-4-6
secondi una dall'altra...e cosi' per + di 17000 registrazioni.....possibile
che ci sia una casualita' cosi' ripetitiva?
ps....i timer sono a 1sec. per la lettura    e a 4 sec per la scrittura su
file...
cosa ne pensate?
"H.P.L." <u...@vaila.ble> ha scritto nel messaggio
news:slrnbcvk...@aidee.softshark...


 cosa ne pensate?
Che oltre ad essere un problema di SO non real-time è anche un problema
di linguaggio (VB) poco adatto per gestire questo genere di cose.


 e a 4 sec per la scrittura su file
Non mi sembra possibile onestamente. E senza vedere il
codice e' difficile aiutarti.
In ogni caso io procederei in modo diverso (in particolare
sul tempo dei timer):
1) Il codice che ora si trova nel TimerLettura lo metti in
una Sub EseguiLettura();
2) Il codice che ora si trova nel TimerScrittura lo metti in
una Sub EseguiScrittura();
3) Usi *un solo* Timer (chiamiamolo TimerLetturaScrittura);
4) Dichiari una variabile Single (chiamiamola
mTempoAvvioTimer) a livello di modulo (Private in testa al
modulo/form);
5) Dichiari una variabile Integer (chiamiamola
mIterazioneAttuale) a livello di modulo;
6) Imposti l'intervallo di TimerLetturaScrittura a mezzo
secondo (500ms ma anche meno: fino a certi livelli, piu'
diminuisci, piu' aumentera' la precisione);
7) Ogni volta che nel software avvii il timer (se questo
accade piu' volte, altrimenti e' sufficiente una tantum
prima di attivarlo la prima volta) esegui le assegnazioni:
   mIterazioneAttuale = 1
   mTempoAvvioTimer = Timer
Attenzione a "questo" Timer: e' la funzione VB che
restituisce il numero di secondi trascorsi dalla mezzanotte.
8) In una costante o in una variabile a livello di modulo se
vuoi poter configurare il numero di secondi fra una
scrittura e l'altra dichiari:
    Private Const NumeroIterazioniPrimaDellaScrittura As
Integer = 4
9) All'interno del codice del TimerLetturaScrittura scrivi:
    If (Timer - mTempoAvvioTimer) >= IterazioneAttuale Then
        Call EseguiLettura
        IterazioneAttuale = IterazioneAttuale + 1
        If IterazioneAttuale =
NumeroIterazioniPrimaDellaScrittura Then
            mTempoAvvioTimer = Timer
            mIterazioneAttuale = 1
            Call EseguiScrittura
        End If
    End If
Questo codice verifica ogni mezzo secondo (o meno se
l'intervallo e' piu' basso) se e' passato 1 secondo (e ad
ogni iterazione successiva, 2, 3 o 4 secondi) dal tempo di
riferimento memorizzato in (mTempoAvvioTimer). Se e' passato
esegue una lettura ed incrementa l'iterazione attuale di
uno.
Se sono passati 4 secondi, registra il nuovo tempo di
riferimento, imposta l'iterazione attuale = 1 ed esegue una
scrittura.
Questo e' solo un esempio di come potresti risolvere la
questione mantenendo il codice che hai scritto e con poche
modifiche. Personalmente preferisco un'organizzazione del
codice in classi alla programmazione procedurale :)
hth,
Lokar
-- 
Sito Comune: 
http://www.it-lang-vb.net/
Manifesto: 
http://www.it-lang-vb.net/docs/Manifesto.txt
UGIdotNET - 
http://www.ugidotnet.org