Newsgroup: it.comp.lang.visual-basic
Titolo: OCX infinito

Ciao a tutti.
Vorrei sapere se è possibile creare on OCX che al suo interno ha un metodo
pubblico che una volta richiamato esegue un ciclo infinito.
Questo OCX (anche se all'interno della procedura inserisco degli DOEvents)
bloccherà l'esecuzione della mia routine che richiama il metodo oppure
appena richiamato il puntatore passerà all'istruzione successiva eseguendo
contemporaneamente la routine infinita del mio OCX e le successive
istruzioni della mia routine?
Grazie tante!
Pivanti Marco

 wrote in message
news:8oldsq$d44$1...@lacerta.tiscalinet.it...


Grazie per l'interessamento Alessandro.
Ora prova ad immaginare il funzionamento di Wininet DLL.
Quando tu invii ad un server una stringa attraverso Wininet, lui ti
restituisce
subito il puntatore, ma al suo interno continua a testare l'arrivo di
eventuali
dati dal server.
Quando i dati arrivano, wininet genera un evento DataArrival .
Il funzionamento del mio OCX vuole essere lo stesso, continuare a testare
una determinata porta e generare un evento quando il buffer di questa
cambia.
Un mio programma di prova deve poter generare piů istanze di questo OCX e
avviarle tutte quante (per testare piů porte).
Se all'avvio del programma nel metodo LOAD non posso avviare tutte le
istanze dell'ocx perchč all'avvio della prima non mi viene restituito il
puntatore, sono fregato!!!
Grazie ancora per gli eventuali aiuti!!!!
Marco!

 istanze dell'ocx perchè all'avvio della prima non mi viene restituito il


Non è così semplice come può sembrare.
Io e un mio amico stiamo sviluppando un'applicazione che deve prelevare
dei dati da molti server contemporaneamente utilizzando diversi tipi di
protocolli.
Ad esempio un server ci mette a disposizione dei normalissimi file, quindi
noi utilizzeremo l'FTP
Un'altro server riceve delle mail da dei telefonini, quindi abbiamo bisogno
di ricevere il contenuto delle mail.
Ce ne sono altri, comunque il succo del discorso e che abbiamo deciso di
fare per ogni tipo di ricezione dati, un OCX che non fa altro che continuare
a cercare file, mail, messaggi SMS ecc... nei server e restituirli in una
collezione dopo aver cancellato codesti files... dal server.
(può sembrare idiota continuare a cercare all'infinito, ma i dati (in
files,mail,...) arrivano da GPS quindi ogni secondo)
Questi OCX in parte gli abbiamo già studiati e sviluppati.
L'unico problema che ci ha lasciati di merda e che noi pensavamo che un OCX
come tale girasse in un Thread separato e che quindi potesse essere avviato
rilasciando libero il proseguimento del codice.
Non ne siamo sicuri, però pensiamo che ci sia il metodo di fare questo!
Bisogna solo sapere come!
Attualmente siamo in grado di gestire un solo tipo di connessione alla
volta,
per poterne gestire di più , dovremmo aprire più volte il programma!!
Spero ti possa aiutare tutto questo e ti ringrazio ancora per eventuali
futuri suggerimenti.
P.s: Una cosa che ci interessa sapere è: se è impossibile da realizzare il
controllo di cui ti parlavo sopra, perchè se è così siamo veramente fregati!
Grazie
Marco

 wrote in message
news:8oluh2$jur$1...@lacerta.tiscalinet.it...


Effettivamente hai ragione!!
il modo più veloce è quello di far fare ad un'altro controllo, quali winsock
o Inet, tutto il lavoro di avvertimento dell'arivo dei dati così da poter
liberare il nostro OCX da cicli infiniti.
Questa è sicuramente la soluzione più veloce e noi ti ringraziamo veramente
di cuore!!!!!!
Io personalmente però voglio chederti ancora una cosa:
È possibile creare un controllo OCX che esegua qualsiasi tipo di codice (in
background) ripetutamente senza che (una volta richiamato con un metodo)
blocchi l'andamento del codice?
(esempio: winsock come cavolo fa a eseguire un codice di controllo e ad
avvertirti quando arrivano dei dati senza però bloccare l'andamento del
codice?)
Ancora grazie!
Marco e Simone!

 wrote in message
news:8onpnm$84e$1...@lacerta.tiscalinet.it...


 blocchi l'andamento del codice?
Una soluzione *MOOOLTO* artigianale per avere metodi asinconi e' quella di
ritardare con un timer l'esecuzione del metodo "vero", piu' o meno cosi':
Public Sub AsyncMioMetodo()
    Timer1.Tag="MioMetodo"
    Timer1.Enabled=True 'il timer puo' avere l'intervallo che vuoi, diciamo 50
ms
    'A questo punto il controllo ritorna al chiamante.
End Sub
Private Sub Timer1.Timer
    Timer1.Enabled=False    'disabilitiamo subito il Timer e processiamo la
chiamata
    CallByName Me, Timer1.Tag, vbMethod
End Sub
Private Sub MioMetodo()
    'il codice "vero", magari con un RaiseEvent per notificare al chiamante
    'il completamento della chiamata.
    'Volendo puoi anche lasciare "Public" questo metodo in modo da avere la
    'scelta tra chiamata sincrona/asincrona.
End Sub
Lo so, e' brutto ma dovrebbe andare...se non puoi usare controlli visuali sul
tuo OCX basta implementare il timer con le API SetTimer/KillTimer e funzione di
callback.
Ciao
--
Luca Dormio
luca....@tin.it
luca....@sig-la.com