Come dormire o mettere in pausa un PThread in c su Linux

Sto sviluppando un’applicazione in cui faccio il multithreading. Uno dei miei thread di lavoro mostra le immagini sul widget. Un altro thread suona il suono. Voglio interrompere / sospendere / mettere in pausa / sospendere i thread su un evento click del pulsante. È come quando clicchiamo sul pulsante play / pause del lettore video. Sto sviluppando la mia applicazione in c ++ su piattaforma Linux usando la libreria pthread per il threading.

Qualcuno può dirmi come riesco a interrompere i thread / sospendere?

È ansible utilizzare una variabile di condizione mutex, e una variabile di flag condivisa per fare ciò. Supponiamo che questi siano definiti globalmente:

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); 

I tuoi thread eseguono il polling dei “messaggi” dall’interfaccia utente a intervalli regolari. In altre parole, l’interfaccia utente in una discussione pubblica messaggi di azione sui thread di lavoro, ad esempio audio / video.