Это класс таймера.Вы можете создать объект и вызывать его следующим образом:
timer timer_1(time_in_milliseconds, true_if_async, &function_name, argument_1, arg_2, ...);
Таким образом, вы можете запускать свои функции по прошествии определенного времени, вы можете запускать несколько функций вместе с асинхронным или просто использовать синхронизацию ипоставить их в очередь.Ваш выбор.
Темы - лучшее решение для вашей проблемы.
class timer
{
public:
template <class Callable, class... Arguments>
timer(int after, const bool async, Callable&& f, Arguments&&... args)
{
std::function<typename std::result_of<Callable(Arguments...)>::type()> task(bind(forward<Callable>(f), forward<Arguments>(args)...));
if (async)
{
thread([after, task]()
{
std::this_thread::sleep_for(std::chrono::milliseconds(after));
task();
}).detach();
}
else
{
std::this_thread::sleep_for(std::chrono::milliseconds(after));
task();
}
}
};
Вот небольшой пример использования:
void say(const string& word)
{
cout << "Hello, " << word << "!\n";
}
int main(int argc, char* argv[])
{
while (true)
{
timer timer1(500, false, &say, "pyreN - A");
timer timer2(1000, false, &say, "pyreN - B");
}
}