2
0
mirror of https://github.com/AxioDL/metaforce.git synced 2025-12-08 21:07:42 +00:00

LambdaTransaction added to ClientProcess

This commit is contained in:
Jack Andersen
2016-03-31 18:24:28 -10:00
parent af47ed657f
commit 9d72601f9a
3 changed files with 30 additions and 2 deletions

View File

@@ -46,6 +46,12 @@ void ClientProcess::CookTransaction::run(BlenderToken& btok)
m_complete = true;
}
void ClientProcess::LambdaTransaction::run(BlenderToken& btok)
{
m_func(btok);
m_complete = true;
}
ClientProcess::Worker::Worker(ClientProcess& proc)
: m_proc(proc)
{
@@ -66,8 +72,11 @@ void ClientProcess::Worker::proc()
lk.lock();
m_proc.m_completedQueue.push_back(std::move(trans));
}
if (!m_proc.m_running)
break;
m_proc.m_cv.wait(lk);
}
m_blendTok.shutdown();
}
ClientProcess::ClientProcess(int verbosityLevel)
@@ -100,6 +109,16 @@ ClientProcess::addCookTransaction(const hecl::ProjectPath& path, Database::IData
return ret;
}
const ClientProcess::LambdaTransaction*
ClientProcess::addLambdaTransaction(std::function<void(BlenderToken&)>&& func)
{
std::unique_lock<std::mutex> lk(m_mutex);
LambdaTransaction* ret = new LambdaTransaction(*this, std::move(func));
m_pendingQueue.emplace_back(ret);
m_cv.notify_one();
return ret;
}
bool ClientProcess::syncCook(const hecl::ProjectPath& path, Database::IDataSpec* spec, BlenderToken& btok)
{
if (spec->canCook(path, btok))