Próbuję przenieść kod systemu Windows na system Linux, najlepiej za pośrednictwem bibliotek niezależnych od platformy (np. Doładowanie), ale nie jestem pewien, jak przenieść ten fragment kodu zdarzenia.Międzyplatformowy odpowiednik zdarzeń systemu Windows
Bit kodu zawiera dwa wątki (pozwala wywoływać je A i B). A chce zrobić coś, co tylko B może, więc wysyła B wiadomość, a potem czeka, aż B powie, że to zrobione. W oknach wygląda to mniej więcej tak:
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);
}
Spojrzałem na biblioteki boost :: thread, ale nie wydaje się mieć wszystko, co robi, gdy zamyka widziałem był boost :: condition_variable, ale wydaje się, oznacza to w połączeniu z muteksem, co nie ma miejsca w tym przypadku.
Myślę, że twój specyficzny dla systemu Windows kod używa muteksu pod maską. Po prostu to usuwa. – rmeador
możliwy duplikat zdarzenia [ręcznego resetowania okna pthread] (http://stackoverflow.com/questions/178114/pthread-like-windows-manual-reset-event) – jww
[to pytanie] (http: // stackoverflow .com/questions/4692717/win32-reset-event-like-synchronization-class-with-boost-c) ma również dobre informacje – Loomchild