我希望用户输入一个时间,例如 1400h - 这将导致函数在 1400h 运行。
我怎样才能做到这一点?
上下文:我有一个在同一台计算机上工作的客户端-服务器程序 - 我需要多个节点同时发送消息(这是上面的功能)
编辑:理想情况下,我不想使用sleep()
函数,因为问题是客户端将在不同时间启动,并且作为一种解决方案来调用导致函数在 1400h 执行的东西要整洁得多。
您可以使用std::this_thread::sleep_until
,例如
void main()
{
auto fire_time = /**/;
std::thread thread([&]
{
std::this_thread::sleep_until(fire_time);
fire();
});
thread.join();
}
您可以将其重构为辅助函数,这可能是您正在寻找的:
template<class Func, class Clock, class Duration>
void run_at(Func&& func, const std::chrono::time_point<Clock,Duration>& sleep_time)
{
std::thread(std::bind([&](const Func& func)
{
std::this_thread::sleep_until(sleep_time);
func();
}, std::move(func)))
.detach();
}
如果程序一直在运行,请使用一个函数,例如sleep
等待从现在到 1400 小时之间的时间量。您可能需要在单独的线程中执行此操作以允许程序执行其他操作,或者将 替换为sleep
事件循环超时(如果程序是基于事件循环的)。
如果程序必须退出,那么您必须使用系统工具(例如at
在 Unix 上)来安排重新启动程序并在指定时间执行代码。
我相信您需要某种任务管理器。这是一个基本模型。培育睡眠线是非常错误的方式来完成这项工作。单个经理将知道何时运行下一个任务。如何运行任务是另一个问题。如果您希望它们具有交互性,您可以为每个任务创建新线程。或者您可以将它们序列化并从管理器线程中运行。