Newsgroup: it.comp.lang.visual-basic
Titolo: Funzioni .... a tempo ?!?

Prima di tutto grazie per avermi risposto.
Dunque, il problema è che ho
molte funzioni per molti messaggi che sono in
cascata, per cui ho bisogno
necessariamente di avere la risposta prima dell'
"end function",
altrimenti mando un altro messaggio.
E' un po complicato da spiegare, ma
ho usato proprio i timer per gestire il
TimeOut.Quindi se per tot secondi
non ricevo niente riesco ad uscire da quel
ciclo.
Il problema è solo
quello di fare aspettare la funzione senza usare un Do
... Loop,
altrimenti significherebbe stravolgere il programma.
Grazie mille e
ciao.
Claudio.
--------------------------------
Inviato via 
http://usenet.iol.it
 

>altrimenti significherebbe stravolgere il programma.
E' un rischio che forse stai correndo.
Hai pensato di organizzare le operazioni utilizzando gli eventi del mscomm ?
ciao, hal

 ha scritto nel messaggio
news:98uatc$3nrkq$1...@ID-56381.news.dfncis.de...


Ciao,
magari stò per dire una ca**ata, ma te la butto la, chi sa che ti
dia uno spunto per fare una cosa più elegante.
Premetto che non ho mai
fatto niente che comunicasse con la porta seriale, quindi non conosce
minimanente quel controllo, però quello che te hai fatto con il ciclo io lo
tradurrei in Timeout, come solitamente accade per la comunciazioni tra due
dispositivi.
Se ho capito bene, te fai un ciclo per vedere finchè non hai
qualcosa uguale a Messaggio_Arrivato (non ricordo i nomi che hai usato) e
non ti schiodi da li finche questo valore non assume quello che te vuoi,
giusto? Ma se per un ipotetico errore, quel ciclo non finisse mai, la tua
applicazione restebbe appesa all' infinito? Secondo me, sarebbe più carino
che tu stabilisci un limite a questa attesa, 1 minuti, 10 minuti...quel che
vuoi, però prima o poi seghi tutto. Non so se come metodo già non ci sia,
ma se non esiste puoi implementarlo tu. Come? Io immagino una cosa del
genere:
1) A invia qualcosa a B e (A) fa partire un timer
2) B alla
ricezione di questo qualcosa setta un flag o quel che vuoi per indicare che
ha ricevuto
3) scaduto il timer controlli se nel flag c'è o no quello che
ti aspettavi.
Se c'è, hai avuto la risposta, ok, è arrivato, altrimenti
se alla fine del tempo da te impostato il flag non ti va bene, arrivederci
e grazie, taglia tutto e non è arrivato niente.
Ripeto, è un idea...una
cosa che ti butto li, anzi, se vuoi veramente farlo bene, potresti usare
due timer, uno per il tempo massimo e uno che controlla ogni 10 secondo (la
butto li) se il flag ti va bene, in questo modo se nel tenpo massimo non
hai risposta esci da li, se invece hai una risposta prima che scada il
tempo massimo esci per l' altro timer (quello che conrollava ogni 10
secondi) e puoi anche dire in quanto tempo quel qualcosa si è spostato.
Cosa ne pensi?
Saluti...


Supponiamo di creare una funzione di questo tipo:
Private function
(messaggio as string)
      MSComm1.output = messaggio
End Function
supponiamo invece di volere da questa funzione una risposta al nostro
output e quindi di volere che la nostra funzione "aspetti" un output prima
di uscire. Io avrei realizzato questa cosa così:
Private function MsgOut
(messaggio as string) as String
      MSComm1.output = messaggio
      Do
doevents
      Loop Until MsgArrivato = true
      MsgOut = MsgArrivato
End Function
per cui quando mando un messaggio sulla seriale lo faccio
in questo modo
Response = MsgOut (Messaggio)
(logicamente da parte
gestisco gli eventi di ricezione della seriale)
e sono sicuro che mi sia
arrivato il messaggio prima di mandarne un'altro.
Il problema nasce dal
fatto che, avendo inserito quel DoEVents, a volte il programma si blocca.
Potrei fare in un altro modo per non uscire da quella funzione senza un Do
.... Loop ?
Grazie a tutti come sempre.


End Function
ciao, hal

 >E' proprio cosě che faccio.


condizione ? Ma senza usare un Do .... Loop.
In questi casi userei la funzione per ottenere un ritorno che mi informi se si e' verificato
un errore, poi nella gestione dell' evento o nella funzione di callback (dipende come e' 
organizzato il tutto) imposterei un flag o valorizzerei una variabile visibile da tutto il
codice interno all' oggetto.
ciao, hal