fixing bugs
This commit is contained in:
parent
3c974a33de
commit
013b1dc344
@ -6,6 +6,14 @@
|
|||||||
|
|
||||||
namespace SE
|
namespace SE
|
||||||
{
|
{
|
||||||
|
|
||||||
|
namespace ST
|
||||||
|
{
|
||||||
|
extern boost::condition_variable FunctionFinishedCondition;
|
||||||
|
|
||||||
|
extern boost::mutex FunctionMutex;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
template<typename RETURNTYPE>
|
template<typename RETURNTYPE>
|
||||||
RETURNTYPE PerformInMainThread(boost::function<RETURNTYPE()> f)
|
RETURNTYPE PerformInMainThread(boost::function<RETURNTYPE()> f)
|
||||||
@ -18,21 +26,30 @@ namespace SE
|
|||||||
{
|
{
|
||||||
RETURNTYPE result;
|
RETURNTYPE result;
|
||||||
|
|
||||||
boost::mutex serviceLock;
|
bool functionCalled = false;
|
||||||
|
|
||||||
boost::function<void()> func =
|
boost::function<void()> func =
|
||||||
[&result, &f, &serviceLock] ()
|
[&] ()
|
||||||
{
|
{
|
||||||
result = f();
|
result = f();
|
||||||
serviceLock.unlock();
|
|
||||||
|
{
|
||||||
|
boost::mutex::scoped_lock lock(FunctionMutex);
|
||||||
|
functionCalled = true;
|
||||||
|
}
|
||||||
|
FunctionFinishedCondition.notify_one();
|
||||||
};
|
};
|
||||||
|
|
||||||
serviceLock.lock();
|
|
||||||
|
|
||||||
|
|
||||||
ST::MainThreadIoService.post(func);
|
ST::MainThreadIoService.post(func);
|
||||||
|
|
||||||
serviceLock.lock();
|
boost::mutex::scoped_lock lock(FunctionMutex);
|
||||||
serviceLock.unlock();
|
|
||||||
|
while (!functionCalled)
|
||||||
|
{
|
||||||
|
FunctionFinishedCondition.wait(lock);
|
||||||
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
|
||||||
|
@ -2,13 +2,19 @@
|
|||||||
|
|
||||||
namespace SE
|
namespace SE
|
||||||
{
|
{
|
||||||
|
|
||||||
namespace ST
|
namespace ST
|
||||||
{
|
{
|
||||||
boost::asio::io_service MainThreadIoService;
|
boost::asio::io_service MainThreadIoService;
|
||||||
|
|
||||||
boost::thread::id MainThreadId;
|
boost::thread::id MainThreadId;
|
||||||
|
|
||||||
|
boost::condition_variable FunctionFinishedCondition;
|
||||||
|
|
||||||
|
boost::mutex FunctionMutex;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#ifndef UTILS_ENGINE
|
#ifndef UTILS_ENGINE
|
||||||
void AssertIfInMainThread()
|
void AssertIfInMainThread()
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user