Я пытаюсь перенести некоторый код Windows в Linux, в идеале через независимые от платформы библиотеки (например, boost), однако я не уверен, как перенести этот фрагмент кода события.
Часть кода включает два потока (давайте назовем их A и B). A хочет сделать что-то, что может сделать только B, поэтому он отправляет B сообщение, а затем ждет, пока B скажет, что все готово. В винде это выглядит примерно так:
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);
}
Я посмотрел на библиотеку boost::thread, но, похоже, в ней не было ничего, что делало бы это, замыкания, которые я мог видеть, были boost::condition_variable, но, похоже, это означает в сочетании с мьютексом, что не так. здесь.