Newsgroup: it.comp.lang.visual-basic
Titolo: Ciclo vuoto e Cpu al 99%

Ho un ciclo di questo tipo
Do
  DoEvents
Loop while finito=TRUE
un ciclo del genere funziona bene, mi permette di spostare i form
dell'applicazione però rimane con la CPU al 99.9% finchè non esce dal
ciclo.
Non c'è un modo per tenere la CPU più bassa in attesa che la mia
risposta arrivi?
PS Per come è concepito il programma non posso usare timer e cose varie
devo comunque tenere un ciclo di questo tipo.
Gianni
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 varie devo comunque tenere un ciclo di questo tipo.
prova a mandare a nanna il pc
(api sleep :-) )
--
Salutoni
Sergio
per rispondere... togli il group dall'indirizzo

 varie devo comunque tenere un ciclo di questo tipo.
Allora tienilo. Potevi far a meno di chiedere se avevi già la risposta...

 varie devo comunque tenere un ciclo di questo tipo.
Spiegami:
Tu vuoi che il tuo applicativo parli col sistema in continuazione, cioè che
esegua milioni di operazioni nell'unità di tempo, ma che ciò non richieda
CPU?
Se non vuoi usare un Timer (che rimane la soluzione migliore), al limite
sospendi il ciclo una volta al giro con l'Api Sleep...
ciao
Alberto

Do
    If (lngContatore Mod 20) = 0 Then
        DoEvents
    End if
    Contatore = Contatore + 1
Loop While Finito = True
In questo modo il DoEvents viene richiamato ogni 20 cicli e qualcosa
risparmi.
Ciao, Vincenzo

 limite sospendi il ciclo una volta al giro con l'Api Sleep...
I due sistemi non sono del tutto equivalenti, per il semplice fatto che uno
e' sincrono e l'altra asincrono; la soluzione migliore dipende dal problema
specifico... per una pausa tra due blocchi di codice, per esempio, il timer
non e' praticabile.
Ciao
-- 
Luca Dormio - 
luca....@tin.it
________________________________
"Marty, non stai ragionando in maniera quadridimensionale"
Dr. Emmett L. Brown

 sospendi il ciclo una volta al giro con l'Api Sleep...
Grazie ai vostri consigli ho trovato una soluzione ottimale, fare 100ms
di sleep
e poi un DoEvents mi consente di muovere la finestra con un consumo
bassissimo di CPU
Do
  Call sleep(100)
  DoEvents 
Loop While finito=True


 codice, per esempio, il timer non e' praticabile.
Certo.
Infatti io non so se il suo metodo è convertibile da sincrono ad asincrono.
Ad esempio, molta gente usa un loop come quello mostrato, per aspettare
risposte dalla seriale, e poi si lamenta della Cpu, quando ripensando in
modalità asincrona la cosa, e quindi usando Timer o, meglio, OnComm,
l'utilizzo di Cpu è ridotto al minimo indispensabile.
L'inserimento della pausa fra due blocchi di codice è una pratica abbastanza
'barbara', che quando posso evito. Quasi sempre, infatti, è possibile
ripensare la cosa in modo da renderla asincrona.
*Quasi* sempre.
Ciao
Alberto
-- 
"Tina, ta te tòta tinta un tac!"
"Te cat tac i tac, m'tac't un tac?"
"Me ca tac un tac a tè?
Tac'tel te l tò tac, tò!"


si però o IngContatore lo dichiari come intero lungo oppure scrivi
do
 if IngContatore = 20 then
        doEvents
        ingContatore=0
 end if
 contatore=contatore+1
loop while finito=false    'false e non true come era scritto :-)

 loop while finito=false    'false e non true come era scritto :-)
e questa roba funziona?
Così si evita il DoEvent, ma il programma è lì che gira sulla CPU come un
pazzo!
Ciao
--
Math Parser : 
http://www.neodatatype.net
Sito Comune : 
http://www.it-lang-vb.net