fixing bugs

This commit is contained in:
vladislav.khorev committed 2013-03-04 19:09:56 +00:00
1 parent 3c974a33de
commit 013b1dc344
2 files changed
+31 -8

No files matched your search

+24 -7
View File
@@ -6,6 +6,14 @@
namespace SE
{
namespace ST
{
extern boost::condition_variable FunctionFinishedCondition;
extern boost::mutex FunctionMutex;
}
template<typename RETURNTYPE>
RETURNTYPE PerformInMainThread(boost::function<RETURNTYPE()> f)
@@ -18,21 +26,30 @@ namespace SE
{
RETURNTYPE result;
boost::mutex serviceLock;
bool functionCalled = false;
boost::function<void()> func =
[&result, &f, &serviceLock] ()
[&] ()
{
result = f();
serviceLock.unlock();
{
boost::mutex::scoped_lock lock(FunctionMutex);
functionCalled = true;
}
FunctionFinishedCondition.notify_one();
};
serviceLock.lock();
ST::MainThreadIoService.post(func);
serviceLock.lock();
serviceLock.unlock();
boost::mutex::scoped_lock lock(FunctionMutex);
while (!functionCalled)
{
FunctionFinishedCondition.wait(lock);
}
return result;