Newsgroup: it.comp.lang.visual-basic
Titolo: Winoldap ed altro

Ciao a tutti,
dunque il mio problema e' questo con VB5
Ho creato un applicazione che fa una shell per un programma bat,
ebbene questo programma viene richiamato circa 700 - 800 volte
solo che dopo un po' si blocca e mi da' un errore con mascherina blu.
Se mentre va premo CTRL-ALT-CANC vedo che sono aperti un'infinità di
WINOLDAP. Come posso fare???
thanks
P.S. Ho provato ad usare SHELL ("pathname", qualsiasi cosa) ma niente
grazie 1000
***********************
* 
cos...@mediacom.it
 *
***********************
\/\/ Opera ! The best browser !

 WINOLDAP. Come posso fare???
Un bel problema da disperati  :-(
Assicurati che tutte le precedenti 700-800 aperture siano realmente chiuse (non ci siano finestre aperte o cose simili).
Cosa fa questo BAT?
Che SO usi?
Quel'e' la reale chiamata che fai?
Sei sicuto che sia quella la reale causa dell'inchiodamento?
-- 
Hi, Ciao
Ettore                 By -MES-
http://freeweb.aspide.it/freeweb/ilmes
Il sito comune di programmatori VB
http://members.xoom.com/it_lang_vb

 > WINOLDAP. Come posso fare???
Tieni presente che la shell non aspetta la fine dell'esecuzione del programma lanciato ma continua subito dopo il suo
lancio, quindi tu lanci n volte lo stesso programma mentre vi sono altre istanze dello stesso bat ancora in esecuzione e ad
un certo punto, giustamente, windows si satura.
Una soluzione sarebbe quella di aspettare che l'esecuzione del .bat sia terminata prima di lanciarne un'altra e questo lo
puoi fare usando l' API GetModuleUsage a cui devi passare l'handle che ti restituisce la shell, mentre la sua dichiarazione
è questa:
Declare Function GetModuleUsage Lib "Kernel" (ByVal hModule As Integer) As Integer
la funzione andrebbe richiamata in un loop dal quale si esce quando il risultato della funzione è 0.
Questo ti rallenta l'esecuzione ma ti elimina il tuo problema , per velocizzare Potresti fare questo controllo non ad ogni
lancio ma quando il numero dei lanci raggiunge un certo valore (per es. 100) incrementando una variabile ad ogni lancio e
quando arriva al numero fissato esegui il loop fino alla fine dell'ultima istanza lanciata. ciao.

controllo.txt
|Che SO usi?
Aime' Windows 98
|Quel'e' la reale chiamata che fai?
SHELL ("D:\Kim.bat "+nomefile,0)
|Sei sicuto che sia quella la reale causa dell'inchiodamento?
Ebbene si perche' anche su un vecchio pc fa cosi'
Grazie Ciao



What's?

>WINOLDAP. Come posso fare???
Se richiami 700 - 800 un programma senza chiuderlo, hai 700 - 800
applicazioni aperte (WINOLDAP immagino che sia old windows application). La
soluzione al tuo problema dovrebbe essere (ipotizzo in quanto non so perchè
richiami il programma) di lanciare il programmo *.bat, aspettare che abbia
finito i suoi calcoli, chiuderlo, riaprirlo ecc.
Sul sito comune mi sembra che ci sia un esempio di come fare a congelare VB
fino a quando il programma lanciato non sia chiuso.
Ciao Bruno

 scrisse:
|> > Ho creato un applicazione che fa una shell per un programma bat,
|> > ebbene questo programma viene richiamato circa 700 - 800 volte
|> > solo che dopo un po' si blocca e mi da' un errore con mascherina blu.
|> > Se mentre va premo CTRL-ALT-CANC vedo che sono aperti un'infinità di
|> > WINOLDAP. Come posso fare???
|
|Tieni presente che la shell non aspetta la fine dell'esecuzione del programma lanciato ma continua subito dopo il suo
|lancio, quindi tu lanci n volte lo stesso programma mentre vi sono altre istanze dello stesso bat ancora in esecuzione e ad
|un certo punto, giustamente, windows si satura.
|Una soluzione sarebbe quella di aspettare che l'esecuzione del .bat sia terminata prima di lanciarne un'altra e questo lo
|puoi fare usando l' API GetModuleUsage a cui devi passare l'handle che ti restituisce la shell, mentre la sua dichiarazione
|è questa:
|
|Declare Function GetModuleUsage Lib "Kernel" (ByVal hModule As Integer) As Integer
|
|la funzione andrebbe richiamata in un loop dal quale si esce quando il risultato della funzione è 0.
|
l'ho fatto ma se faccio :
K=shell("C:\mio.exe",1)
getmoduleusage (k)
mi da' errore e questo perche':
1) L ha valore -32000 o giu' di li e quindi non un integer
2) La libreria Kernel non la trovo.. dove posso trovarla?? Io vado in
riferimenti ma non ho trovato nessun Kernel o qualcosa di simile
Scusami se ti do distrurbo ma purtroppo non sono un programmatore
bravo...
Grazie
|Questo ti rallenta l'esecuzione ma ti elimina il tuo problema , per velocizzare Potresti fare questo controllo non ad ogni
|lancio ma quando il numero dei lanci raggiunge un certo valore (per es. 100) incrementando una variabile ad ogni lancio e
|quando arriva al numero fissato esegui il loop fino alla fine dell'ultima istanza lanciata. ciao.
|
***********************


In Wed, 09 Sep 1998 13:01:38 GMT, 
lore...@galactica.it
 scrisse:
|
cos...@mediacom.it
 (Cosmico Rules !) wrote:
|
|>Ciao a tutti,
|>dunque il mio problema e' questo con VB5
|>
|>Ho creato un applicazione che fa una shell per un programma bat,
|>ebbene questo programma viene richiamato circa 700 - 800 volte
|>solo che dopo un po' si blocca e mi da' un errore con mascherina blu.
|>Se mentre va premo CTRL-ALT-CANC vedo che sono aperti un'infinità di
|>WINOLDAP. Come posso fare???
|
|Intanto se ti spiegassi meglio potremmo aiutarti....
Allora scusami ma l'unico a non capire sei stato tu ... In pratica
ogni volta che faccio:
SHELL "C:\mio.bat",1 
mi si apre nel task manager il task WINOLDAP 
e questo parecchie volte... Ora sembra sia dovuto al fatto che non
chiudo le applicazioni ma come faccio a sapere se sono chiuse o no????
Sai qualche function che mi permette di ovviare questo problema??
thanks



Kernel è il windows, e non è possibile che tu non ce l'abbia , ameno che tu non stia programmando in MAC !?!
La funzione getmoduleusage ti restituisce un valore intero che se è 0 indica che il programma ha finito l'esecuzione altrimenti
è ancora in esecuzione. Ciao.

 scrisse:
|>>Ho creato un applicazione che fa una shell per un programma bat,
|>>ebbene questo programma viene richiamato circa 700 - 800 volte
|>>solo che dopo un po' si blocca e mi da' un errore con mascherina blu.
|>>Se mentre va premo CTRL-ALT-CANC vedo che sono aperti un'infinità di
|>>WINOLDAP. Come posso fare???
|
|
|Se richiami 700 - 800 un programma senza chiuderlo, hai 700 - 800
|applicazioni aperte (WINOLDAP immagino che sia old windows application). La
|soluzione al tuo problema dovrebbe essere (ipotizzo in quanto non so perchè
|richiami il programma) di lanciare il programmo *.bat, aspettare che abbia
|finito i suoi calcoli, chiuderlo, riaprirlo ecc.
|Sul sito comune mi sembra che ci sia un esempio di come fare a congelare VB
|fino a quando il programma lanciato non sia chiuso.
|
Che sito???? mi sapresti indicare??
Grazie


 bravo...
Sul Sito Comune (vedi qui sotto), c'e' un esempio (shellwait.zip) di come lanciare un prg ed attendere che si chiude.



Se puntualizzassi anche che versione di VB stai usando (magari la 5) e che,
comunque stai lavorando a 32bit, ti avremmo potuto dire che l'API
GetModuleUsge() e' solo a 16bit (Windows 3.1), e NON ESISTE PIU' in WIN32
(Windows 95).
Guarda sul Sito Comune di questo newsgroup c'e' quello che ti serve:
ShellWait.zip.
Il sito comune di programmatori VB
http://members.xoom.com/it_lang_vb
--
Roal Zanazzi
z...@iol.it

 scrisse:
|
|
|Cosmico Rules ! wrote:
|
|> |Declare Function GetModuleUsage Lib "Kernel" (ByVal hModule As Integer) As |
|>
|> l'ho fatto ma se faccio :
|> K=shell("C:\mio.exe",1)
|> getmoduleusage (k)
|> mi da' errore e questo perche':
|> 1) L ha valore -32000 o giu' di li e quindi non un integer
|
|e che c'entra L?
Hai ragione e' K che mi restituisce -32000...
|> 2) La libreria Kernel non la trovo.. dove posso trovarla?? Io vado in
|> riferimenti ma non ho trovato nessun Kernel o qualcosa di simile
|>
|
|Kernel è il windows, e non è possibile che tu non ce l'abbia , ameno che tu non stia programmando in MAC !?!
No..no windows 98... 
come mai mi restiruisce -32000??
Grazie per ogni spiegazione!!



Non è un problema, se ti restituisce un valore diverso da 0 vuol dire che il programma è ancora in esecuzione
quindi continui il loop fino a quando k=0. Ciao.