Comment mettre en veille ou suspendre un disque dur sous c sous Linux
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?
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.