-\r
-class frame_producer_remover\r
-{\r
- executor executor_;\r
- tbb::atomic<int> count_;\r
-\r
- void do_remove(safe_ptr<frame_producer>& producer)\r
- {\r
- auto name = producer->print();\r
- producer = frame_producer::empty();\r
- CASPAR_LOG(info) << L"async_remover[" + boost::lexical_cast<std::wstring>(--count_) + L"] Removed: " << name << L".";\r
- }\r
-public:\r
-\r
- frame_producer_remover()\r
- {\r
- executor_.start();\r
- count_ = 0;\r
- }\r
-\r
- void remove(safe_ptr<frame_producer>&& producer)\r
- {\r
- CASPAR_ASSERT(producer.unique());\r
- CASPAR_LOG(info) << L"async_remover[" + boost::lexical_cast<std::wstring>(++count_) + L"] Removing: " << producer->print() << L".";\r
- executor_.begin_invoke(std::bind(&frame_producer_remover::do_remove, this, std::move(producer)));\r
- }\r
-};\r
-\r
-frame_producer_remover g_remover;\r
-\r
-struct layer::implementation : boost::noncopyable\r