View Single Post
Old 04-05-2012, 09:18   #2
[Kendall]
Senior Member
 
L'Avatar di [Kendall]
 
Iscritto dal: Jul 2005
Città: Vicenza
Messaggi: 1570
Quote:
Originariamente inviato da DomusP45 Guarda i messaggi
Salve a tutti...
sto impazzendo per fare una lettura sulla porta seriale vincolata ad un timer con un ciclo while.

Il codice che ho usato è:


Codice:
int Timeout = 3;
long endValue = clock()+CLOCKS_PER_SEC* Timeout;

//primo tentativo di lettura
int i = PollComport(Pnum,buffer);

//se non ha letto niente (i==0)

while (clock()<endValue || i>0){
   i = PollComport(Pnum,buffer);
   sleep(1);
}
La funzione PollComport è una funziona di lettura seriale della libreria che sto usando (in pratica è una read) che restituisce il numero di byte letti (li ritorna in i).

Pertanto a me serve che questo ciclo finisca o perchè ha letto (quindi i è diventata diversa da zero) o perchè è finito il tempo di attesa, impostato a priori cioè 3 secondi.

Perchè non funziona? Rimane bloccato....

Aiutatemi a capire il problema dove sta.
Grazie anticipatamente a tutti quelli che mi risponderanno...
Domus come ti accennavo nella passata discussione, se imposti il tempo di timeout a 3 secondi, come nell'esempio, lui deve per forza uscire dopo 3 secondi, o al verificarsi della seconda condizione (in quanto il codice legato al timer è corretto). L'unica motivazione per la quale il ciclo può rimanere bloccato è perchè l'esecuzione stessa del PollComport(...) sia bloccante (analogamente ad un cin.get(), per fare un esempio). Se ci posti il codice di quella funzione (o la documentazione riguardante se non è opensource) potremmo aiutarti più facilmente.
[Kendall] è offline   Rispondi citando il messaggio o parte di esso