Update processor

This commit is contained in:
John Zhao 2018-04-26 15:15:33 +08:00
parent b97baae06d
commit 81be95db12
2 changed files with 21 additions and 6 deletions

View File

@ -59,11 +59,10 @@ void Processor::SetProcessCallback(ProcessCallback callback) {
callback_ = std::move(callback);
}
void Processor::Activate() {
void Processor::Activate(bool tree) {
if (activated_)
return;
activated_ = true;
{
if (tree) {
// Activate all parents
Processor *parent = parent_;
while (parent != nullptr) {
@ -71,13 +70,20 @@ void Processor::Activate() {
parent = parent->parent_;
}
}
activated_ = true;
thread_ = std::thread(&Processor::Run, this);
// thread_.detach();
}
void Processor::Deactivate() {
void Processor::Deactivate(bool tree) {
if (!activated_)
return;
if (tree) {
// Deactivate all childs
iterate_processors(GetChilds(), [](std::shared_ptr<Processor> proc) {
proc->Deactivate();
});
}
activated_ = false;
{
std::lock_guard<std::mutex> lk(mtx_input_ready_);

View File

@ -39,8 +39,8 @@ class Processor /*: public std::enable_shared_from_this<Processor>*/ {
void SetPostProcessCallback(PostProcessCallback callback);
void SetProcessCallback(ProcessCallback callback);
void Activate();
void Deactivate();
void Activate(bool tree = false);
void Deactivate(bool tree = false);
bool IsActivated();
bool IsIdle();
@ -93,6 +93,15 @@ class Processor /*: public std::enable_shared_from_this<Processor>*/ {
std::thread thread_;
};
template <typename T>
void iterate_processors(
const T &processors, std::function<void(std::shared_ptr<Processor>)> fn) {
for (auto &&proc : processors) {
fn(proc);
iterate_processors(proc->GetChilds(), fn);
}
}
MYNTEYE_END_NAMESPACE
#endif // MYNTEYE_PROCESSOR_H_ NOLINT