PDA

Visualizza versione completa : [ansi c] ricevere input durante un ciclo senza bloccarlo


Gergio
18-03-2005, 16.25.42
Ciao sto realizzando un'applicazione (in ambiente linux usando il c) e ho la necessita' di rimanere in ascolto sulla porta seriale, mentre succedono anche altre cose.
Tra le cose che possono succedere c'e' un eventuale input da tastiera, che poi deve essere mandato alla seriale. L'ascolto della seriale e' fatto all'interno di un ciclo (while) che qndi nn puo' essere fermato. Pensavo esistesse qlche funzione che ricevesse l'input, senza aspettare la pressione del tasto INVIO, ma nn ne ho trovate (conio.h nn c'e' in ambiente linux) e allora sto cercando soluzioni alternative.
Mi era venuto in mente che avrei potuto ridirigere lo stdout in un file e poi, ad ogni iterazione, controllare tale file. Ma poi penso sia un casino per le altre applicazioni, dato che lo stdout nn e' piu' lo schermo. Oppure ho pensato che potrei creare due applicazioni: una che rimane in ascolto e una che riceve l'input da tastiera. Il problema e' fare comunicare le due applicazioni cioe' inviare qllo che ricevo da tastiera (in una applicazione) sulla seriale (nell'altra applicazione). Ho visto che c'e' la possibilita' di usare la dichiarazione "volatile" per le variabili, ma nn ho trovato come usarle per le 2 applicazioni. Allora sto implementando un sistema basato su file: ricevo un input, lo metto in un file e dalla parte dell'applicazione in ascolto sulla seriale, ad ogni iterazione, controllo se il file e' stato cambiato e se devo inviare qlcosa alla seriale. Pero' credo che l'uso dei file appesantisca l'applicazione (l'iterazione per l'ascolto sulla seriale e' molto rapida e se ogni volta devo aprire un file e guardarci dentro...)

Avete consigli costruttivi da darmi?
grazie per l'attenzione

ceccus
18-03-2005, 21.37.41
Salve,
Beh...questa la classica applicazione che , per funzionare bene, abbisogna di lanciare almeno 2 Thread....uno , quello primario che fa quello che deve fare, quindi cicli e quant'altro.....il secondo, magari, rimane in ascolto sulla porta che vuoi te e "si sveglia" quando arriva un messaggio da processare....

Ciao !!

Gergio
22-03-2005, 00.39.51
scusa, oggi nn ho avuto tempo per risponderti perche' stavo cercando documentazione sui thread concorrenti ;)

grazie :)