Comment std::thread sommeil
Je suis nouveau à std::thread. J'ai besoin de mettre un fil de dormir à partir d'un autre thread, est-ce possible? Dans les exemples, tout ce que je vois est un code comme:
std::this_thread::sleep_for(std::chrono::seconds(1));
Mais ce que je veux faire, c'est quelque chose comme:
std::thread t([]{...});
t.sleep(std::chrono::seconds(1));
ou
sleep(t, std::chrono::seconds(1));
Des idées?
Honnêtement, la meilleure solution est de résoudre quelque problème que vous rencontrez une façon logique. Il n'y a vraiment aucune raison que vous ne souhaitez mettre un fil à la veille d'un autre thread. Si le thread est en train de faire le travail que vous voulez faire maintenant, pourquoi le mettre en veille? Si le thread n'est pas de faire le travail que vous voulez faire maintenant, alors que son code est cassé et il doit être corrigé.
Éventuellement ce que vous voulez vraiment utiliser est
Éventuellement ce que vous voulez vraiment utiliser est
std::condition_variable
et de ses méthodes comme wait(...)
ou wait_for(...)
OriginalL'auteur José | 2012-10-12
Vous devez vous connecter pour publier un commentaire.
Parce que
sleep_for
est synchrone, il n'a vraiment de sens que dans le thread courant. Ce que vous voulez, c'est une façon de suspendre /reprendre d'autres threads. La norme ne fournit pas un moyen de le faire (autant que je sache), mais vous pouvez utiliser dépend de la plateforme, à l'aide de méthodesnative_handle
.Par exemple sur Windows,
SuspendThread
etResumeThread
.Mais le plus important est qu'il n'y est presque jamais nécessaire pour ce faire. Habituellement, lorsque vous rencontrez des choses de base dont vous avez besoin que la norme ne fournit pas, c'est un drapeau rouge que vous vous dirigez vers le bas un dangereux chemin de conception. Envisager la réalisation de vos plus grand objectif d'une manière différente.
OriginalL'auteur
Pas. La norme ne donne pas une telle facilité, et il ne devrait pas. Ce n'sommeil? Il interrompt l'exécution d'un thread donné pour au moins la période de temps donnée. Les autres threads connaissent peut-être sans la synchronisation que le fil peut être mis en veille afin d'atteindre une meilleure performance?
Pas. Vous devez fournir un synchronisé de l'interface, ce qui serait contre le gain de performance de threads. Le seul fil qui a besoin de savoir si c'est ok pour dormir, c'est le fil lui-même. Donc
std::thread
n'a pas de membresleep
, tandis questd::this_thread
en a un.OriginalL'auteur