1

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

我怎样才能做到这一点?

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

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

4

3 回答 3

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();
}
于 2013-07-10T06:10:54.123 回答
1

如果程序一直在运行,请使用一个函数,例如sleep等待从现在到 1400 小时之间的时间量。您可能需要在单独的线程中执行此操作以允许程序执行其他操作,或者将 替换为sleep事件循环超时(如果程序是基于事件循环的)。

如果程序必须退出,那么您必须使用系统工具(例如at在 Unix 上)来安排重新启动程序并在指定时间执行代码。

于 2013-07-10T06:05:35.933 回答
0

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

于 2013-07-10T08:09:48.840 回答