Merge pull request #19326 from alalek:gapi_async_service_lazy_initialization

pull/19343/head
Alexander Alekhin 4 years ago
commit 255853a819
  1. 28
      modules/gapi/src/executor/gasync.cpp

@ -37,9 +37,16 @@ class async_service {
std::thread thrd;
public:
async_service() = default ;
public:
// singleton
static async_service& instance()
{
static async_service the_ctx;
return the_ctx;
}
void add_task(std::function<void()>&& t){
if (!thread_started)
{
@ -87,6 +94,8 @@ public:
cv.notify_one();
}
}
protected:
~async_service(){
if (thread_started && thrd.joinable())
{
@ -99,7 +108,6 @@ public:
}
};
async_service the_ctx;
}
namespace {
@ -169,7 +177,7 @@ void async_apply(GComputation& gcomp, std::function<void(std::exception_ptr)>&&
call_with_callback(apply_l,std::move(callback), DummyContext{});
};
impl::the_ctx.add_task(l);
impl::async_service::instance().add_task(l);
}
std::future<void> async_apply(GComputation& gcomp, GRunArgs &&ins, GRunArgsP &&outs, GCompileArgs &&args){
@ -183,7 +191,7 @@ std::future<void> async_apply(GComputation& gcomp, GRunArgs &&ins, GRunArgsP &&o
call_with_future(apply_l, prms.value, DummyContext{});
};
impl::the_ctx.add_task(l);
impl::async_service::instance().add_task(l);
return f;
}
@ -196,7 +204,7 @@ void async_apply(GComputation& gcomp, std::function<void(std::exception_ptr)>&&
call_with_callback(apply_l,std::move(callback), ctx);
};
impl::the_ctx.add_task(l);
impl::async_service::instance().add_task(l);
}
std::future<void> async_apply(GComputation& gcomp, GRunArgs &&ins, GRunArgsP &&outs, GCompileArgs &&args, GAsyncContext& ctx){
@ -210,7 +218,7 @@ std::future<void> async_apply(GComputation& gcomp, GRunArgs &&ins, GRunArgsP &&o
call_with_future(apply_l, prms.value, ctx);
};
impl::the_ctx.add_task(l);
impl::async_service::instance().add_task(l);
return f;
}
@ -224,7 +232,7 @@ void async(GCompiled& gcmpld, std::function<void(std::exception_ptr)>&& callback
call_with_callback(apply_l,std::move(callback), DummyContext{});
};
impl::the_ctx.add_task(l);
impl::async_service::instance().add_task(l);
}
void async(GCompiled& gcmpld, std::function<void(std::exception_ptr)>&& callback, GRunArgs &&ins, GRunArgsP &&outs, GAsyncContext& ctx){
@ -236,7 +244,7 @@ void async(GCompiled& gcmpld, std::function<void(std::exception_ptr)>&& callback
call_with_callback(apply_l,std::move(callback), ctx);
};
impl::the_ctx.add_task(l);
impl::async_service::instance().add_task(l);
}
std::future<void> async(GCompiled& gcmpld, GRunArgs &&ins, GRunArgsP &&outs){
@ -250,7 +258,7 @@ std::future<void> async(GCompiled& gcmpld, GRunArgs &&ins, GRunArgsP &&outs){
call_with_future(apply_l, prms.value, DummyContext{});
};
impl::the_ctx.add_task(l);
impl::async_service::instance().add_task(l);
return f;
}
@ -265,7 +273,7 @@ std::future<void> async(GCompiled& gcmpld, GRunArgs &&ins, GRunArgsP &&outs, GAs
call_with_future(apply_l, prms.value, ctx);
};
impl::the_ctx.add_task(l);
impl::async_service::instance().add_task(l);
return f;
}

Loading…
Cancel
Save