Newsgroup: it.comp.lang.visual-basic
Titolo: Timer assorbe 100% CPU ????

Salve,
ho bisogno di mettere una pausa temporale fra alcune operazioni.
Ho usato un ciclo  DO.....LOOP, inserendo all'interno del codice che fa
parte degli esempi Microsoft.
Il punto e' che tali cicli mi mandano l'utilizzo della CPU al 100% !!!!!!!
E' mai possibile?
Mi date una diritta per inserire delle pause tra i 5 secondi e il minuto
all'interno di un ciclo (senza stressare la CPU)?
Grazie in anticipo.
Gianfranco
P.S.
Perche' negli esempi Microsoft si danno i secondi per dare gli intervalli
temporali, mentre l'evento timer funziona con i millisecondi?

Grazie in anticipo.
Prego in ritardo :-))))

Inizialmente non lo avevo inserito, e la macchina era lentissima. Poi ho
inserito il comando in questione e le cose sono migliorate, ma comunque
l'utilizzo della CPU e' al 100%. Se apro due processi gli stessi mi vanno
comunque a saturare il 100% della CPU etc.
Sembrerebbe impossibile ottenere un minor utilizzo del processore (sono dei
processi molto elementari, del tipo cerca e sostituisci dopo alcuni secondi,
etc) inserendo il controllo timer!
Gianfranco

temporali, mentre l'evento timer funziona con i millisecondi?
Perche' sono MicroSoft...non lo sapevi? Alla M$ sono un po' grossolani...:-)
Ciao!


------------
Francesco Beccari
frankb!
interplanet.it
(sostituire ! con @ per l'indirizzo corretto)
(change ! with @ for my correct email address)
Spam? No, thanks!

di attesa.
Non c'e' nessun bisogno di scrivere una DLL e la funzione Sleep (che
rilascia la CPU ad uso di altri thread) e' richiamabile direttamente dal
programma dopo averla dichiarata a livello di modulo:
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds&)
In generale, se ho bisogno di far accadere eventi a specifici (e
possibilmente precisi) intervalli, uso il multithreading che, anche in VB,
risulta abbastanza semplice da implementare (ma e' meglio leggersi prima il
libro di J. Richter "Advanced Windows").
Ciao e buon anno!
Gian Michele Bertoni
--
Home Page: 
http://space.tin.it/computer/gbertoni/

...

Che la CPU venga utilizzata al 100% dal processo che usa DoEvents e'
alquanto opinabile.
Windows 3.11 funzionava TUTTO cosi!
Quando si fa DoEvents si cede il controllo al Sistema Operativo e quindi
agli altri processi; fa fare un bel giretto al processore a visitare tutti
gli altri processi.
Il SO fa lo stesso, quello che cambia e' che sei tu (col DoEvents) a farlo,
e non il SO, quindi il SO *CREDE* che il processore sia usato al 100% solo
perche' non e' lui a passare il controllo agli altri processi.
Che il DoEvents sia piu' pesante che non farlo e' ovvio, ma non e' vero che
il processo che ne fa uso continua ad occupare il 100% del processore.
Ciao
By -MES-   Maronese Ettore
http://ilmes.freeweb.org
(con OCX per stampare i recordset)
Sito Comune di programmatori Visual Basic
http://members.xoom.com/it_lang_vb


wrote:


libro di J. Richter "Advanced Windows").
Solo che io non so come funzioni in VB :-)
Ciao!

- Devi conoscere il C e come fare una DLL.
...
Oppure puoi vedere al sito 
http://www.mvps.org/ccrp/
 dove ci sono vari
controlli e dll e tra questi una che gestisce i timer, ma che dll ... Da
provare veramente.

gli altri processi.
No aspetta...che sappia io DoEvents semplicemente processa i messaggi
nella coda del sistema...
Pero' processa solo i messaggi, non fa calcoli....cioe' se hai un processo
che
ti sta facendo una bella moltiplicazione fra matrici 600x600 questo mentre
calcola non lancia messaggi, quindi nel momento in cui fai DoEvents questo
processo non va avanti di un passo....
Poi sopra ci sta il "multithreading" di W95 o IL multithreading di NT, ma
questo non
ha a che vedere con DoEvents.
In sostanza: DoEvents non serve per fare multitasking...
===Dall'help di VB3
DoEvents:
Causes Visual Basic to yield execution so that Microsoft Windows can process
events.
The DoEvents function returns the number of visible forms.
DoEvents passes control to the Windows environment.  Control is not returned
until the Windows environment has finished processing the events in its
queue and all keys in the SendKeys queue have been sent.
Use DoEvents to interrupt processing so the Windows environment can respond
normally to other events, such as keyboard input and mouse clicks.  If parts
of your code take up too much processor time, use DoEvents to relinquish
control to the Windows environment.
Caution Make sure the procedure that has given up control with DoEvents is
not executed again by a different part of your program before the first
DoEvents call returns; this could cause unpredictable results.  In addition,
do not use DoEvents if other applications
could possibly interact with your procedure in unforeseen ways during the
time you have yielded control.
========
Come tra l'altro si vede dall'ultima linea dell'help, DoEvents non da
nessuna garanzia...semplicemente permette al sistema
di aggiornare l'output e rispondere ai click del mouse....
Ciao!
P.S.: magari mi sbaglio eh...:-)

Ciao!
----------
Ciao
Ma non si può utilizzare l'API "Sleep"?
Declare Sub Sleep Lib "Kernel32.dll" Alias "Sleep" (ByVal dwMilliseconds As
Long)
Nella Win32 Programmer's Reference, essa è così definita: «The Sleep
function suspends the execution of the current thread for a specified
interval».
Marco Minerva
http://www.geocities.com/SiliconValley/Foothills/7260/
http://www.armaditaggia.com/marco
=================

 Ma non si può utilizzare l'API "Sleep"?
Ho seguito tutto il thread e ho fatto un paio di prove.
La funzione aspetta effettivamente il numero di millisecondi passato
come parametro, pero' a quanto ho visto in cicli tipo quello di attesa
di dati da internet occorre comunque mettere il DoEvents altrimenti
l'applicazione si blocca.
Spero di essere stato utile.
--
Ciao,_
    /_)
   /ier
                   +---------------------------------+
                   |  Piergiorgio Ghezzo  (PJ/KNB)   |
                   |                                 |
                   | E-mail: 
pgh...@dsi.unive.it
    |
                   |         2:333/
70...@fidonet.org
 |
                   |         39:101/1...@amiganet.ftn |
                   |         PJ on IRC/#AMIGAITA     |
                  /)    ULR: www.the 
pentagon.com/PJ
 (\
                 / )    FAX: ++39-41-276-0079        ( \
             (\ ( (+---------------------------------+) ) /)
              \(\\ \   / )                      / )  / //)/
               \\\\ \_/ /                       \ \_/ ////
                \      /                         \      /
                 \    /                           \    /