Newsgroup: it.comp.lang.visual-basic
Titolo: Timer senza timer

Ho una funzione del tipo
Private Function Prova (Input as String) as String
        Do
            DoEvents
        Loop until ' si verifica una condizione
        Prova = "Condizione Verificata"
End Function
In questo modo quando chiamo Prova da un'altra Sub, quest'ultima aspetta a
continuare la sua esecuzione
Allo stesso modo, da un' altro form lancio un'altra funzione del genere e
aspetto che si verifichi una condizione
per continuare l'esecuzione.
E' possibile fare questo senza usare il Do .... Loop ?
Perchè in questo modo, per cicli lunghi due o più Do .... Loop con un
DoEvents in mezzo mi fanno casino.
Mi interesserebbe farlo senza stravolgere il programma, nel senso che per
ogni form della mia applicazione ho decine di queste chiamate a funzioni
diverse in cascata e, in questo modo, sono sicuro di chiamare una funzione
solo quando quella precedente è terminata. Inoltre il mio programma avrà
anche uno scheduler che interpellerà le diverse fonzioni a tempo, perciò
vorrei una risposta puntuale e non una gestione degli eventi.
Non so se ho detto troppe ca ... te, comunque spero di aver reso il
concetto.
Grazie a tutti.
P.S. Scusate se sembra la replica del post di ieri, ma ho avuto
l'impressione di non essermi spiegato bene.

usa gli eventi

.... Loop si incanti se apro un form.
Se guardi la documentazione di m$ riguardo alla funzione DoEvents, trovi un avvertimento.
Viene detto che tale funzione e' utile in cicli stretti per consentire, ad esempio l' interruzione
da parte dell' utente. 
Si avverte, pero', che se viene eseguito del codice in altri punti del programma durante l' attesa
di DoEvents possono verificarsi dei risultati imprevedibili.
Percio' DoEvents non va usata se, ad esempio, altre applicazioni potrebbero interagire
con la nostra procedura in modi non previsti durante l'attesa in cui viene ceduto il controllo.
In questi casi e' preferibile utilizzare la programmazione ad eventi o, se proprio non c'e' altra
strada, ricorrere ad un timer (con il rischio pero' di  aumentare la confusione).
ciao, hal


Riposto il mio teorema
    CasinoTimer = (numero di timers) ^ ((numero di timers) * (numero
DoEvents nei timers))
Esiste anche la versione Loop:
    CasinoLoop = (numero di loop) ^ (numero DoEvents nei loop)
Da cui si deduce:
    Casino = CasinoTimer * CasinoLoop
** Usa gli eventi **
Mai i timer (a meno che non devi visualizzare solo l'ora e la data)
Mai i loop se non sono strettamente indispensabili (es. loop sugli elementi
di un array).
Mai i DoEvents, a meno che in un loop *indispensabile* non devi dare la
possibilità di interromperlo.
Nel tuo caso specifico puoi usare un timer di windows (api
SetTimer/KillTimer): lo crei, quando scade fai quello che devi fare e lo
distruggi.
Occhio che devi usare una funzione di CallBack.
Ciao

Occhio che devi usare una funzione di CallBack.
Penso che non la ripeterai mai abbastanza .)
Pero' se si decidesse di fare una sezione sulle "trappole" del vb, anzi "common mistakes",
metterei questa fra le prime :)
ciao, hal

 ha scritto nel messaggio
news:991uu9$nfi$1...@nreadA.inwind.it...


A proposito ...... ma cosa significa imho ??? (per hal1961).
In My Humble Opinion
ciao, hal

 ha scritto nel messaggio
news:99394o$48e0j$1...@ID-56381.news.dfncis.de...
