在特定时钟时间执行功能

时间:2013-07-10 05:58:32

标签: c++ clock

我希望用户输入一个时间,例如1400h - 这将导致函数在1400h运行。

我该怎么做?

上下文:我有一个在同一台计算机上运行的客户端 - 服务器程序 - 我需要几个节点同时发送消息(这是上面的功能)

编辑:理想情况下,我不想使用sleep()函数,因为问题是客户端将在不同的时间启动,并且作为一种解决方案来调用导致函数的功能的东西更加简洁在1400h执行。

3 个答案:

答案 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)

我相信你需要某种任务管理器。这是一个基本模型。繁殖睡眠线是完成这项工作的非常错误的方法。单个经理将知道何时运行下一个任务。如何运行任务是另一个问题。如果您希望它们是交互式的,则可以为每个任务创建新线程。或者您可以序列化它们并在管理器线程中运行。