Oppure

Loading
12/05/08 4:18
salve ragazzi....

e' da qualche mese che sto' lavorando ad un programmino di chat....e c'e' una sub chi investe un ruolo di una certa importanza , cioe' crea un ritardo,.....
Sub Pause(ByVal interval As Double)
    Dim Current As Double
    Current = Timer
    Do While Timer - Current < interval
    DoEvents
    Loop
End Sub

questa funzione non fa' altro che creare un ritardo dove viene inserita ed e' davvero comodissima al posto di usare un delay,....
es.

private sub command1_click()
pause 1
msgbox "ciao"
end sub

facendo cosi' si ritarda di un secondo, dopo l'esecuzione dell'evento click , dell amessa a video del messagebox.....
questo codice originariamente proviene da planetsource code, poi e' stato modificato da antoniog di p2pforum, che mi ha concesso di pubblicare il sorgente con notevoli migliorie, ovviamente con i riconoscimenti.....

il problema di fondo e' che questo codice contiene un doevents, che porta ad un utilizzo esoso della cpu.....
dovrei modificare questa funzione in modo tale che questo doevents non ci sia piu'.....
qualcuno ha qualche idea?......
Ultima modifica effettuata da 12/05/08 20:15
12/05/08 8:53
Overflow
uno sleep???
aaa
12/05/08 9:09
gantonio
Sub Pause(ByVal interval As Double) 
    Dim Current As Double 
    Current = Timer 
    Do While Timer - Current < interval 
       Sleep 15
       DoEvents 
    Loop 
End Sub 


Questo dovrebbe bastare ... ovviamente devi aggiungere la dicharazione della API Sleep ...
aaa
12/05/08 9:16
anche lo sleep mi era stato suggerito in passato....ma a mio avviso ha parecchi inconvenienti, sicuramente ha un uso quasi nullo della cpu, pero' dal canto suo blocca l'intera applicazione , di per se' un secondo non e' nulla, ma questa funzione la ho usata anche per intervalli di 10 secondi, ed in taluni casi mi e' tornata utile in alcuni cicli do while che mi permettevano di evitare l'inserimento di un timer, che potrebbero girare per alcuni minuti, il che' renderebbe l'inserimento dello sleep alquanto sconveniente,.....non e' detto che questa funzione si riesca a migliorarla modificandola puo' anche essere necessario doverla riscrivere da zero....
la cosa appare semplice , ma in realta' e' piu' compessa di quello che sembra....per quello ho chiesto aiuto a questo forum.... io sono solo un beghinner in programmazione e da solo non ci arrivo....
Ultima modifica effettuata da 12/05/08 9:19
12/05/08 9:32
gantonio
Guarda che ti ho suggerito di inserire 15 millisecondi di sleep all'interno del ciclo con il DoEvents ... Non ti accorgerai del fatto che il thread si blocca per 15 ms ma se ne accorgera' la CPU che non sara' piu' impegnata. Il DoEvents garantira' il dispatch dei messaggi.

P.S. Sei un beginner anche con l'inglese ... :-)
aaa
12/05/08 14:57
P4p3r0g4
un do loop aperto stressa un bel po la CPU non e` consigliabile usarlo anzi..
aaa
12/05/08 17:42
gantonio
Postato originariamente da P4p3r0g4:

un do loop aperto stressa un bel po la CPU non e` consigliabile usarlo anzi..


Con la Sleep no ...
aaa
12/05/08 19:42

Con la Sleep no ...

infatti....ho fatto la prova con il tasckmanager e la cpu non se neccorge neanche.....non pensavo di avere un miglioramento simile.....

grazie mille....