Dichiarazione del problema
Sto scrivendo un programma di console C # che preleva i dati binari provenienti dalla COM1 seriale, convertendo ogni byte in esadecimale ASCII e poi emettendo i caratteri HEX attraverso la COM2 seriale.
Vorrei che questo programma si avvii continuamente nella shell dei comandi ma esca anche con garbo (in modo che le risorse di sistema come le porte COM vengano liberate). Il problema è che non esiste alcun timeout sul flusso di dati seriali in entrata / in uscita (mi piacerebbe che il programma funzioni per settimane-mesi alla volta). Quindi, come potrebbe uscire un programma di questo tipo quando l'utente vuole smettere?
La possibilità di connettersi a e disconnettere da una sessione di comunicazione seriale è una funzionalità standard della maggior parte degli emulatori di terminali e volevo sapere in che modo gli sviluppatori implementano tale soluzione.
Soluzioni iniziali
- Fai leggere il programma da un file di testo e riconosci i comandi come "smettere" da esso. L'utente crea semplicemente un file di testo, scrive "esci" e la prossima volta che l'applicazione si appresta a leggere il file, sa di uscire! Non mi piace questa soluzione perché sarò rimproverato per la creazione di un'interfaccia utente arcaica.
- Fai leggere l'applicazione da una terza porta COM ed elaborare i dati flusso come comandi. Si chiude quando vede "uscire" in ReadBuffer .
- Crea un secondo programma (processo) che richiama il programma precedente come un processo. Quindi, fare in modo che il secondo processo gestisca l'I / O dell'utente stdin in un'altra finestra della console. Quando l'utente inserisce "esci", il secondo processo dovrebbe terminare il primo processo. (Non ho mai lavorato con più processi quindi non so quale funzione chiama o librerie da guardare.
- Rendi il programma multi-threaded. Avere un filo di esecuzione per leggendo in byte, un altro per fare la conversione, un altro da scrivere il convertito e un altro per gestire l'input da stdin .
Commenti
Non sono sicuro di quale soluzione investire in tempo. Attualmente sto esaminando (4).