Newsgroup: it.comp.programmare.win32
Titolo: Concetti multiutenza (come evitare la cpu al 100%)

Proprio ieri ho visto un server win2k dove un banalissimo programma di
gestione bancaria (e fornito dalla banca stessa) tiene la CPU secca al
100% rendendo il server quasi inusabile _senza_ fare nulla visto che si
limita a chiamare ogni tot tempo gestento up/download in quel momento.
Visto che mi devo mettere dietro proprio ad un programma VB che girera'
lato server (e facendo un lavoro simile) mi chiedo come evitare tale
comportamento.
Ma non dovrebbe pensarci win2k stesso? (ma allora xche' li non ci
riusciva?)
Impostarlo come servizio aiuta?
Vi ringrazio e buona giornata a tutti
Paolo


wrote:

Che io sappia no.
Dipende esclusivamente come gestisci le operazioni di attesa.
Semplificando una istruzione simile
flag=TRUE;
while (flag) {
if condizione verificata fai qualcosa e flag=FALSE }
occupa cpu anche se la lanci in un thread separato.
Puoi "limitare i danni" se per esempio all'interno del ciclo esegui
delle PeekMessage e DispatchMessage almeno per non "congelare" la tua
applicazione (se mono thread).
A seconda delle necessita' si puo' fare in modo che il programma stia
in ascolto di eventi gestiti direttamente da Windows e che ti vengono
notificati tramite i normali messaggi (es. con le socket).
Stefano "HappyMan" (Lago Maggiore - NO)
--
Personal Web 
http://www.sgr.info
Email happyman69 (at) 
libero.it

 applicazione (se mono thread).
Oppure ci metti un piccolo Sleep(...), e risolvi tutti i problemi...
-- 
Luc.


wrote:

Non capisco, dall'help leggo che la Sleep "suspends the execution of
the current thread for a specified interval".
In che modo questa pausa puo' essere utilizzata in modo conveniente in
un ciclo, se per esempio la condizione che fa uscire dal ciclo avviene
proprio nell'intervallo specificato ?


 proprio nell'intervallo specificato ?
Perchč stiamo parlando di pochi millisecondi, e perchč mi sembra si stia 
parlando di eventi esterni, quindi molto "lenti"... Prova!
-- 
Luc.

 proprio nell'intervallo specificato ?
Se la condizione fosse one-shot (cioč il suo stato restasse segnalato per
deltat->0), non funzionerebbe ugualmente (lo scheduler potrebbe aver sospeso
il thread, ecc...). Si assume quindi che sia persistente.
La Sleep sospende il thread corrente per qualche millisecondo permettendo ad
altri di usare la CPU e diminuisce considerevolmente il traffico nel BUS
dati.
La soluzione di aggiungere PeekMessage e DispatchMessage giova alla *tua*
applicazione, ma non alle altre (aka CPU = 100%) (a meno che queste funzioni
non utilizzino oggetti di sincronizzazione al proprio interno).
Uno sleep di 5 ms. in un piccolo ciclo (polling) diminuisce l'utilizzo della
CPU dal 100% a meno dell'1%.
Kiuhnm

 CPU dal 100% a meno dell'1%.
Ecco. Confermo.
-- 
Luc.


wrote:

Azz ! Ottimo. Grande cosa questo ng :-)


 Azz ! Ottimo. Grande cosa questo ng :-)
sono in accordo (anche se mi sono appena linktao)
adesso pero' ho anche la domanda di riserva da povero cobolista... La
Sleep() non è di VB giusto? :(


wrote:

No, ma da VB la puoi usare in questo modo
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Stefano "HappyMan" (Lago Maggiore - NO)
--



In VB puoi usare la DoEvents.
Ciao
Fulvia