Newsgroup: it.comp.lang.visual-basic
Titolo: MULTI THREADING

Ciao a tutti,
    innanzitutto vi spiego il mio problema: ho un programma che accede a SQL
SERVER ed esegue quando aggiorno un record una STORED PROCEDURE sul Server
che aggiorna alcuni record correlati. L'aggiornamento è molto pesante e dura
di media 9/10 secondi.
Il mio problema è che la mia applicazione si blocca fino a quando
l'esecuzione della stored procedure non termina.
Come potrei fare in modo che il programma mi restituisca subito il controllo
e vada avanti mentre la stored procedure elabora in background.
Esiste un comando in SQL SERVER che mi restituisce il controllo o devo agire
da codice in VB?
Ciao e grazie a chi mi risponderà.
Flavio

 wrote in message
news:90o6am$18ka$1...@stargate1.inet.it...



Bisognerebbe vedere il codice vb che scatena tutto questo, percio', in via
del tutto generica, mi limito a ricordare che si puo' lanciare il metodo
Execute in modalita' asincrona.
Ciao
Aldo

da codice in VB?
Se la procedura fosse interna al programma, un Do Events al posto giusto risolverebbe il problema,
ma giacché la procedura è esterna, devi agire su quest'ultima. A questo punto, mi fermo, poiché di
SQL Server sono profano...
Ciao,
Moreno
#sirri#@#morenosoft#.com
(togliete "#" dall'indirizzo)
Moreno Sirri VB Site - 
http://www.morenosoft.com/MSVBSite/
---------------------------------------------------------------------------
Le risposte alle tue domande le trovi sul Sito Comune di questo NewsGroup:
 
http://www.murialdo.it/it_lang_vb
---------------------------------------------------------------------------




 ha scritto nel messaggio
news:90o6am$18ka$1...@stargate1.inet.it...


:
Parent initializes a space in the Cygwin process table for child. Parent
creates child suspended using Win32 CreateProcess call, giving the same
path it was invoked with itself. Parent calls setjmp to save its own
context and then sets a pointer to this in the Cygwin shared memory area
(shared among all Cygwin tasks). Parent fills in the childs .data and .bss
subsections by copying from its own address space into the suspended
child's address space. Parent then starts the child. Parent waits on mutex
for child to get to safe point. Child starts and discovers if has been
forked and then longjumps using the saved jump buffer. Child sets mutex
parent is waiting on and then blocks on another mutex waiting for parent to
fill in its stack and heap. Parent notices child is in safe area, copies
stack and heap from itself into child, releases the mutex the child is
waiting on and returns from the fork call. Child wakes from blocking on
mutex, recreates any mmapped areas passed to it via shared area and then
returns from fork itself.
Nessuno pretende che facciate tutto questo... l'importante e' capire il
meccanismo che c'e' dietro

 [...]
Se usi la fork() (non esiste in Win32 la API fork(), l'avranno implementata
con una CreateThread di Win32 con lo stesso puntatore al codice) rimangono
tutti i problemi dovuti all'utilizzo degli oggetti COM.Faccio presente che
tutto in VB e' un oggetto che supporta la IDispacth (componenti Automation)
anche le form. Il grosso problema rimane quello che le librerie interne a VB
che gestiscono le form non sono safe-thread.
Comunque tutta questa discussione esula un po' dal problema (come gestire
una operazione su SQL Server estremamente lunga). Ho letto che si possono
fare delle op. asincrone quindi e' sicuramente la soluzione migliore.
Saluti,
Davide Cafasso

con una CreateThread di Win32 con lo stesso puntatore al codice)
no no, usano un CreateProcess(), l'hanno detto chiaro e tondo nella FAQ
tanto piu' che una fork() non ti chiede alcun parametro (per un thread serve
come minimo l'entry point - e non si puo' usare il WinMain, mi pare di averlo
letto da qualche parte). Anche se poi sconsigliano di usarla, a causa delle
scarse prestazioni...

A me interessa...
Ho fatto il componente Out-Of-Process, ma non riesco a far andare in
multi-threading... Why?
Ho creato un ActiveX DLL Con Threading Model "Thread per Object", ecc. ecc.
Nel programma faccio:
dim pippo as clspippo
set pippo= new clspippo
...ma... Fin quando non completa la sub richiamata... non fa nient'altro...
        Sai darmi qualche dritta?
                Grazie
                                    Allanon

        Sai darmi qualche dritta?
Prova a creare il componente come ActiveX EXE...
Stelvio

>Prova a creare il componente come ActiveX EXE...
Cosě feci e mi dissero di farlo in una DLL... :-((
Ritento?
            Allanon

ma sei un Cecc?
            Allanon

End Sub
A me ha funzionato alla grande provalo e poi dimmi...
Ciao
biXso

 sistema.
perche' (se non ci dilunghiamo troppo) ? anche nt ?

Cioé... Non sono sicuro di aver capito...
Insomma il trucco é richiamare i metodi degli oggetti esterni... Da un
timer?
Comunque grazie!!
            Allanon

ma sei un Cecc?
Scusa???
Sono solo le 4 lettere iniziali del mio cognome.
Ciao 
Stelvio

 scarse prestazioni...
CreateThread() funziona correttamente con VB6, anche in Win9x.
Perché usare una libreria "aliena" ?

SCUSA é che noi della media Valtellina (ho visto anche Stelvio...) chiamiamo
Cecc gli abitanti del versante solatio delle montagne... :-))
        Allanon

), e qui ammetto la mia ignoranza in
materia

Perche' usare una libreria "aliena" ?
Veramente mi crasha sempre con un errore del tipo "aho'! cretino, stai
dereferenziando un puntatore non valido!" o ancora peggio "eccezione non
gestita", che e' il requiemaeterna di qualsiasi processo
E comunque non riesci a realizzarci nulla di complesso

 wrote in message
