std::future< void > Invoke(F&& f, const VoidType& ) { auto p = std::make_shared< std::promise< void > >(std::promise< void >()); auto ft = p->get_future(); queue_.Push([=]() { try { f(data_); p->set_value(); } catch(...) { p->set_exception(std::current_exception()); } }); return ft; }
~ConcurrentAccess() { queue_.Push([=]{done_ = true;}); f_.wait(); }