Question

Je développe une application dans laquelle je fais du multithreading. Un de mes threads de travail affiche des images sur le widget. Un autre fil joue du son. Je veux arrêter / suspendre / suspendre / mettre en veille les discussions sur un événement de clic sur un bouton. C'est comme quand on clique sur le bouton play / pause du lecteur vidéo. Je développe mon application en c ++ sur la plate-forme Linux en utilisant la bibliothèque pthread pour les threads.

Quelqu'un peut-il me dire comment je parviens à suspendre / suspendre les discussions?

Était-ce utile?

La solution

Pour ce faire, vous pouvez utiliser un mutex, une variable de condition et une variable de drapeau partagé. Supposons que ceux-ci soient définis globalement:

pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
int play = 0;

Vous pouvez structurer votre code de lecture de la manière suivante:

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 */
}

Ensuite, pour jouer, vous pouvez faire ceci:

pthread_mutex_lock(&lock);
play = 1;
pthread_cond_signal(&cond);
pthread_mutex_unlock(&lock);

Et pour faire une pause:

pthread_mutex_lock(&lock);
play = 0;
pthread_mutex_unlock(&lock);

Autres conseils

Votre sondage sur les fils de discussion concerne les "messages". de l'interface utilisateur à intervalle régulier. En d'autres termes, l'interface utilisateur d'un fil publie des messages d'action sur les fils de travail, par exemple. audio / vidéo.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top