我希望用户输入一个时间,例如1400h - 这将导致函数在1400h运行。
我该怎么做?
上下文:我有一个在同一台计算机上运行的客户端 - 服务器程序 - 我需要几个节点同时发送消息(这是上面的功能)
编辑:理想情况下,我不想使用sleep()
函数,因为问题是客户端将在不同的时间启动,并且作为一种解决方案来调用导致函数的功能的东西更加简洁在1400h执行。
答案 0 :(得分:3)
您可以使用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();
}
答案 1 :(得分:1)
如果程序一直在运行,请使用sleep
之类的功能等待从现在到1400h之间的时间。您可能需要在单独的线程中执行此操作以允许程序执行其他操作,或者将sleep
替换为事件循环超时(如果程序基于事件循环)。
如果程序必须退出,则必须使用系统工具(例如Unix上的at
)来安排重新启动程序并在指定时间执行代码。
答案 2 :(得分:0)
我相信你需要某种任务管理器。这是一个基本模型。繁殖睡眠线是完成这项工作的非常错误的方法。单个经理将知道何时运行下一个任务。如何运行任务是另一个问题。如果您希望它们是交互式的,则可以为每个任务创建新线程。或者您可以序列化它们并在管理器线程中运行。