[Python] gui e seriale in contemporanea

Marco Giusti marco.giusti a gmail.com
Lun 4 Ago 2014 18:18:05 CEST


On Mon, Aug 04, 2014 at 04:19:02PM +0200, Perini Matteo wrote:
> Il 04/08/2014 15:08, Marco Giusti ha scritto:
> >thread o pattern asincrona. Normalmente ti consiglierei di utilizzare un
> >pattern asincrono ma vista la semplicità del programma, mi sento di
> >consigliarti i thread.
> Ok.
> Vediamo se ho capito bene...
> In un thread metto la classe della gui e in un altro la lettura
> della seriale e poi passo i dati da un thread all'altro?

In grossi termini è esatto.

> Il passaggio dei dati da un thread all'altro genera degli eventi che
> posso usare per richiamare delle funzioni?

No, nessun evento è generato e devi fare attenzione alla
sincronizzazione dei thread. La cosa che ti consiglio è di usare
idle_add che è thread safe. Non ricordo più l'esatta sequenza delle
istruzioni ma con pygtk prima era necessario inizializzare i thread, poi
no. Con gtk3 le cose sono ancora differenti, quindi ti rimando al
manulare per la corretta gestione.

Il thread che gestisce la gui non presenta particolari difficoltà.
Quello che gestisce la seriale è più o meno così:

	...
	while running:
		line = serial.readline()
		GLib.idle_add(do_something_with_the_line, line)
	...

Questo fa' sì che non appena il main loop non ha più niente da fare,
chiama la funzione "do_something_with_the_line". 

ciao
m.


Maggiori informazioni sulla lista Python