Comment dormir ou mettre en pause un PThread en c sous Linux
Je développe une application dans laquelle je ne le multithreading. Un de mes threads de travail affiche les images sur le widget. Un autre thread joue son. Je veux stop/suspension/pause/sommeil le filetage sur un événement de clic de bouton. C'est le même que lorsque l'on clique sur le lecteur vidéo bouton play/pause.
Je suis le développement de mon application en c++ sur linux plate-forme à l'aide de la bibliothèque pthread pour l'enfilage.
Quelqu'un peut-il me dire comment je atteindre fils pause/suspendre?
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser un mutex, la variable de condition, et un drapeau commun variable pour ce faire. Supposons elles sont définies à l'échelle mondiale:
Vous pourriez structure de votre système de lecture de code comme ceci:
Ensuite, pour jouer vous pouvez faire ceci:
Et de la pause:
!play
et également utiliser un mutex lors de la configuration deplay = 0;
. Dans la pratique, ce ne sera pas un problème sur un seul système central, mais il est toujours mieux d'écrire corriger/futur code.play
dans le même temps, alors on va écraser les autres, et si une lecture et une écriture se produire en même temps, puis la lecture peut retourner une valeur. La seule garantie que vous vraiment besoin ici, c'est queplay
est défini (par exemple par l'intermédiaire d'une barrière de mémoire) avant pthread_cond_signal communiqués de la pthread_cond_wait. Peut-pthread de mise en œuvre de pas la garantie que?pthread_cond_wait
peut se réveiller avant que le signal est envoyé. Vous avez pour vérifier la condition. Voir: pubs.opengroup.org/onlinepubs/7908799/xsh/...Vous avez votre fils sondage pour les "messages" à partir de l'INTERFACE utilisateur à intervalle régulier. En d'autres termes, l'INTERFACE utilisateur dans un thread postes des messages d'action pour les threads de travail par exemple audio/vidéo.