Come sospendere o mettere in pausa un PThread in c su Linux
Domanda
Sto sviluppando un'applicazione in cui eseguo il multithreading. Uno dei miei thread di lavoro visualizza le immagini sul widget. Un altro thread riproduce il suono. Voglio interrompere / sospendere / mettere in pausa / sospendere i thread su un evento clic sul pulsante. È lo stesso di quando facciamo clic sul pulsante di riproduzione / pausa del lettore video. Sto sviluppando la mia applicazione in c ++ su piattaforma linux usando la libreria pthread per il threading.
Qualcuno può dirmi come ottengo i thread in pausa / sospensione?
Soluzione
È possibile utilizzare un mutex, una variabile di condizione e una variabile flag condivisa per farlo. Supponiamo che siano definiti a livello globale:
pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
int play = 0;
Puoi strutturare il tuo codice di riproduzione in questo modo:
for(;;) { /* Playback loop */
pthread_mutex_lock(&lock);
while(!play) { /* We're paused */
pthread_cond_wait(&cond, &lock); /* Wait for play signal */
}
pthread_mutex_unlock(&lock);
/* Continue playback */
}
Quindi, per giocare puoi farlo:
pthread_mutex_lock(&lock);
play = 1;
pthread_cond_signal(&cond);
pthread_mutex_unlock(&lock);
E per mettere in pausa:
pthread_mutex_lock(&lock);
play = 0;
pthread_mutex_unlock(&lock);
Altri suggerimenti
Hai il tuo thread di thread per " messaggi " dall'interfaccia utente a intervalli regolari. In altre parole, l'interfaccia utente in un thread pubblica messaggi di azione nei thread di lavoro, ad es. audio / video.