[gl-como] Programmazione

Genio del Male ben.vighy@gmail.com
Mar 14 Mar 2006 15:43:58 CET


Carlo Filippetto wrote:

>Ciao,
>volevo chiedere un consiglio.
>
>La questione è la seguente:
>ho la necessità di leggere dalla porta seriale alcuni valori (nel mio
>caso passatti da un lettore ottico - code_reader).
>
>Ho creato un eseguibile in C che mi permette di sentire se sulla porta
>ho dei dati e poi li legge.. solo che in questo modo tutte le risorse
>del mio computer sono occupate da questo processo!
>
>Vorrei trovare un modo in cui il processo possa girare in back_ground
>fino a che non sente qualcosa sulla porta, a quel punto può anche
>prendersi tutte le priorità tanto so che in pochi secondi millesimi mi
>si libera tutto!!
>
>Sto cercando di gestire gli eseguibili tramite php, con interfaccia web
>dove faccio apparire a video quanto passa sulla seriale.
>
>Spero che abbiate come sempre dei buoni consigli 
>
>P.S.
>- Questa volta lavoro sotto Winzoz (anche se in un secondo tempo dovrò
>probabilmente farne il porting).
>
>CIAO
>
>  
>
>------------------------------------------------------------------------
>
>
>  
>
problema di "Busy Waiting" vedo!! :-D

guarda..... che metodo usi per ascoltare sulla porta!? fai un ciclo che 
continua a verificare i dati in ingresso finchè non trova dati validi e 
allora comincia ad elaborare o una funzione apposita sospensiva!? 
ovviamente qualcosa + simile alla prima ipostesi... se no avresti un 
meccanismo + simile agli interrupt (non veri e proprio interrupt ma 
l'effetto è los tesso: nn spreca risorse) che si attivoa solo quando 
necessario......

cmq una buona regola è: se usi una struttura come questa:

ciclo (consdizione_di_uscita) {
       if ( check_della_porta() ) {
            // fai le cose del caso
       }
}

modificare così:

ciclo (consdizione_di_uscita) {
       if ( check_della_porta() ) {
            // fai le cose del caso
       }
       sleep(timeout);
}


e regolare il timeout in base alla reattività che vuoi avere in elttura 
della porta... oppure al risparmio di risorse:

infatti c'è proporzionalità inversa fra il tmepo del timeout della sleep 
e l'utilizzo di risorse o la reattività del sistema....

per riassumere:

+ timeout ==>  - reattività e - risorse occupate
- timeout  ==>  +reattività ma anche + risorse occupate

vedi tu! :-D io uso timeout di 333 milliseondi.... e non noto mai nessun 
ritardo... ma per programmi di interfaccia visuale.... o in ogni caso 
operazioni non critiche.

Ciao!!


Maggiori informazioni sulla lista gl-como