Domanda

Ho un QThread che legge da una presa di corrente e invia un (segnale QT) segnale quando ci sono dati disponibili. Questo sarebbe facile con lettura bloccante (2), ma devono essere in grado di fermare il filo dall'esterno senza attendere troppo a lungo.

Se dovessi usare pthread userei pselect e pthread_kill(thread_id, some_signal), ma non lo fa QThread sembra avere metodi simili. E l'aggiunta di un dependcy su pthread a questo progetto non sembra elegante.

Anche io non voglio usare altri metodi brutto come costantemente cercando di leggere dal socket con un po 'relativamente piccolo timeout.

Modifica: Le prese non sono TCP, ma il bluetooth L2CAP

.
È stato utile?

Soluzione

Un non troppo elegante, ma semplice e soluzione di lavoro: Creare un tubo e lasciare selezionare attesa sia per il tubo o la mia presa. In questo modo posso fermare l'attesa in qualsiasi momento scrivendo qualcosa al tubo.

Altri suggerimenti

Invece di trattare con l'apparecchio da soli filettatura è possibile utilizzare l'interfaccia asincrona di QTcpSocket. Controlla la Fortune client esempio .

È possibile inviare un segnale al terminate() fessura della vostra QThread. Questo fermerà il tuo thread in base alle politiche di pianificazione del sistema operativo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top