/* * Copyright (c) Meta Platforms, Inc. and affiliates. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #pragma once #include <chrono> #include <condition_variable> #include <mutex> #include <thread> #include <vector> #include <folly/Function.h> #include <folly/Range.h> #include <folly/container/F14Map.h> #include <folly/hash/Hash.h> namespace folly { /** * Schedules any number of functions to run at various intervals. E.g., * * FunctionScheduler fs; * * fs.addFunction([&] { LOG(INFO) << "tick..."; }, seconds(1), "ticker"); * fs.addFunction(std::bind(&TestClass::doStuff, this), minutes(5), "stuff"); * fs.start(); * ........ * fs.cancelFunction("ticker"); * fs.addFunction([&] { LOG(INFO) << "tock..."; }, minutes(3), "tocker"); * ........ * fs.shutdown(); * * * Note: the class uses only one thread - if you want to use more than one * thread, either use multiple FunctionScheduler objects, or check out * ThreadedRepeatingFunctionRunner.h for a much simpler contract of * "run each function periodically in its own thread". * * start() schedules the functions, while shutdown() terminates further * scheduling (after any running function terminates). */ class FunctionScheduler { … }; } // namespace folly