Newsgroup: it.comp.lang.visual-basic
Titolo: Input/Output overlapped... problemi

Ciao a tutti,
ho implementato una lettura/scrittura di dati su dispositivo di
comunicazione (porta seriale) in modalità asincrona in modo da
rendere efficiente l'elaborazione.
Quello che faccio è una ReadFile() passando una struttura OVERLAPPED.
Abilito un timer (circa 0.5 secondi) e controllo se la lettura è
terminata (non ricordo bene la funzione, forse GetOverlappedResult() ).
Se dopo 2 secondi (4 scatti di timer) la lettura asincrona non è terminata
suppongo che il dispositivo non risponde e segnale un errore.
In questo modo, durante la pausa del timer, l'utente ha l'interfaccia
grafica disponibile e può navigare tra i menù e le finestre del progetto.
Quello che mi chiedo è: esiste una funzione (chiamata API) che permette
di aspettare un evento *senza* bloccare l'interfaccia grafica? Ho provato
con WaitForSingleObject() ma durante la pausa l'interfaccia è bloccata.
Sarebbe bello avere una funzione alla quale dico: appena un evento è in
SIGNALED
(l'evento è creato con CreateEvent() e agganciato alla struttura OVERLAPPED
passata mediante ReadFile) oppure è trascorso un certo tempo, passa il
controllo
ad una subroutine di callback asincrona.
WaitForSingleObject() fa più o meno lo stesso con la differenza che
si blocca fino allo scadere del timeout e nel frattempo l'interfaccia è
bloccata.
Grazie.

di aspettare un evento *senza* bloccare l'interfaccia grafica? 
Ti serve un thread di attesa, ma in vb6 potrebbe non essere il massimo.
Sul platform sdk c'e' un articolo intitolato "Thread pooling" che, oltre ad una
visione d' insieme, linka ad un altro articolo intitolato "Wait functions".
Il problema e' che dipende su che sistemi operativi deve girare il tuo
programma: con i Win9x e' un disastro: alla fin fine ti resta proprio
la WaitForSingleObject, che vuoi evitare.
Prova a creare un thread che aspetti l' esito della WaitForSingleObject.
Eventualmente ragioniamone ancora.
-- 
ciao, hal

 ma durante la pausa l'interfaccia è bloccata.
Perché dovrebbe essere un altro thread (diverso da quello
dell'interfaccia) ad aspettare (ed a rimanere bloccato).
Purtroppo in VB il supporto per il multithreading è
inesistente, e l'utilizzo delle funzioni CreateThread, ecc...
è decisamente sconsigliato per i numerosi problemi che
portano.
Credo che non vi sia altra soluzione che passare ad altro
linguaggio (
VB.NET
, Delphi, C, C++, Python, ecc...).
Ciao.
--
BSD is for UNIX-lovers -- linux is for Windows-haters.

 inesistente, e l'utilizzo delle funzioni CreateThread, ecc...
non č proprio cosě puo usare activex multithread
ciao

 non è proprio così puo usare activex multithread
Uhmm... devo dire di non avere mai fatto prove a riguardo, ma
se funziona....
Ciao.
P.S.
Ciò comunque non toglie che il supporto multithread del VB sia
inesistente.
Ri-ciao.


 ha scritto nel messaggio
news:rXdY8.36148$7N3.8...@twister2.libero.it...

Ciao Giuseppe (penso che sia tu)
Se ho capito bene vuoi andare in multithread.
Beh in VB non è il massimo, io non l'ho mai sperimentato
però prova questo 
http://www.desaware.com/articles/threadingL3.htm
        fammi sapere anche in privato va bene
                                                    danilo

 inesistente.
specifichiamo meglio: la runtime č thread-safe. Deve esserlo, perchč in 
VB č possibile creare programmi multi-thread. Esclusa la parte grafica, 
perchč i programmi multithread non possono avere interfaccia grafica
-- 
 < 
http://www.reactos.com/
 >  Open source clone of Windows NT. Current
     Don't stand, REACT!      version 0.0.19. C, C++ and ASM developers
                              and beta testers are welcome!

 possono avere interfaccia grafica
Specifichiamo meglio: in VB i programmi multithread non
possono avere interfaccia grafica ;-)
Ciao.
