[Tech] Domanda

Claudio Kutufa' claudiok@nexusfi.it
Lun 1 Dic 2003 12:50:28 CET


Mi vengono in mente varie ipotesi ma le migliori si basano sul clock di
sistema e se non è affidabile ci possiamo fare poco... in pratica usando la
funzione time, ma se il system clock ti perde colpi c'è da mandare tutto in
loop!

In che senso perde colpi? sta fermo per un po' (pochi secondi) oppure è
anche capace di darti un tempo inferiore a quello segnalato un minuto prima?
se sta fermo per pochi secondi la funzione clock potrebbe andare bene, se
invece le cose vanno diversamente allora è meglio cambiare metodo.

Forse la cosa migliore è usare la funzione time() in qualche programmetto di
prova (che se va in loop puoi tranquillamente killare) in modo da capire
come passa il tempo su quella macchina:
fai un ciclo while nel quale incrementi un contatore, nello while (come
consiglio) gli fai fare qualche calcolo complicato (per far passare un po'
di tempo e non far andare in overflow il contatore). Valuti il tempo
trascorso con la time() e se sono passati 5 min, stampi il contatore ed esci
dallo while. Basta che il clock ti funzioni bene una volta per avere il
fatidico numero da mettere nel tuo ciclo di attesa (in cui devi includere il
calcolo che ti ho detto prima). Se vuoi essere tranquillo su eventuali
overflow ti conviene fare un ciclo di cicli in cui quello interno è un for
(per esempio da 1 a 32000)

Attenzione!, la macchina durante il tuo programma non deve fare altro!,
perchè altrimenti il tuo calcolo potrebbe andare tutto in vacca. Se cioè la
tua macchina è un server cui fai fare molte cose in time sharing allora sei
del gatto (non potendo conoscere a priori l'occupazione di cpu) e l'unico
metodo veramente buono sarebeb la time(). Se per contro la tua macchina non
fa altro allora l'operazione che puoi usare come base dentro il ciclo, per
far passare una piccola frazione di tempo, è l'apertura, chiusura e delete
di un file.

sappimi dire se la cosa ti può sfagiolare

ciao
Claudio



>Sto scrivendo un driver per l'acquisizione di un segnale da microfono,
implentato su linux (RH-7.3).
>Il driver deve accedere per 1 minuto al /dev/dsp, restare in attesa per 5
min, senza fare niente, e poi acquisire di nuovo per 1 minuto.
>
>Non posso far affidamento su una chiamata al bios, perchè l'orologio di
sistema perde piano piano i colpi e non è mai allineato con l'esatta
evoluzione temporale reale.
>
>Conoscete un modo per far star ferma l'elaborazione per 5 minuti e poi
riattivarla?
>Ho pensato a un ciclo do-while, che abbia come condizione un valore intero
che corrisponde al tempo macchina di 5 minuti.
>Non conosco tuttavia un modo per valutare tale intero.
>


+++++++++++++++++++++++++++++++++++++++++++++++++++++
Ing. Claudio Kutufa'
NEXUS SISTEMI INFORMATIVI S.P.A.
e-mail personale:    claudiok@nexusfi.it
tel. cellulare: 335 5859567

Sede Oper.va :  Via Dante da Castiglione, 33
Tel. :  +39 055 229413   Fax : +39 055 229785
50125 Firenze - Italy
Sede Amm.va :  Via Panciatichi 40/11
Tel. :  +39 055 4222030 Fax  : +39 055 4376670
50100 Firenze - Italy

Nexus home page:     www.nexusfi.it
+++++++++++++++++++++++++++++++++++++++++++++++++++++




Maggiori informazioni sulla lista flug-tech