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?

È stato utile?

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.

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