J'essaie de porter du code Windows vers Linux, idéalement via des bibliothèques indépendantes de la plate-forme (par exemple boost), mais je ne suis pas sûr de savoir comment porter ce bit de code d'événement.Équivalent multiplateforme pour les événements Windows
Le bit de code implique deux threads (appelons-les A et B). A veut faire quelque chose que seul B peut faire, donc il envoie un message à B, puis attend que B dise que c'est fait. Dans les fenêtres cela ressemble quelque chose comme:
void foo();//thread a calls this
void bar(HANDLE evt);
void foo()
{
HANDLE evt = CreateEvent(0,FALSE,FALSE,0);
bCall(boost::bind(&bar, evt));
WaitForSingleObject(evt,INFINITE);
CloseHandle(evt);
}
void bar(HANDLE evt)
{
doSomething();
SetEvent(evt);
}
Je regardais le boost :: bibliothèque de fil, mais il na pas semblent avoir quelque chose qui fait cela, les ferme que je pouvais voir était le boost :: condition_variable, mais il semble c'est à dire en conjonction avec un mutex, ce qui n'est pas le cas ici.
Je pense que votre code spécifique à Windows utilise un mutex sous le capot. Cela résume juste cela. – rmeador
duplication possible de [événement de réinitialisation manuelle de fenêtres pthread-like] (http://stackoverflow.com/questions/178114/pthread-like-windows-manual-reset-event) – jww
[cette question] (http: // stackoverflow .com/questions/4692717/win32-reset-événement-comme-synchronisation-classe-avec-boost-c) a aussi une bonne info – Loomchild