00001 /* Copyright (C) 2015-2018 Michele Colledanchise - All Rights Reserved 00002 * Copyright (C) 2018 Davide Faconti - All Rights Reserved 00003 * 00004 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), 00005 * to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, 00006 * and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 00007 * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 00008 * 00009 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 00010 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 00011 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 00012 */ 00013 00014 #include "behaviortree_cpp/tick_engine.h" 00015 00016 // find how condition_variables work here http://es.cppreference.com/w/cpp/thread/condition_variable/wait 00017 00018 namespace BT 00019 { 00020 TickEngine::TickEngine(bool start_ready) : ready_(start_ready) 00021 { 00022 } 00023 00024 void TickEngine::wait() 00025 { 00026 std::unique_lock<std::mutex> UniqueLock(mutex_); 00027 while (!ready_) 00028 { 00029 condition_variable_.wait(UniqueLock); 00030 } 00031 ready_ = false; 00032 } 00033 00034 void TickEngine::notify() 00035 { 00036 std::lock_guard<std::mutex> LockGuard(mutex_); 00037 ready_ = true; 00038 condition_variable_.notify_all(); 00039 } 00040 }