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 に答える
0

ある種のタスクマネージャーが必要だと思います。それが基本モデルです。眠っているスレッドを繁殖させることは、その仕事をするのに非常に間違った方法です。1 人のマネージャーが次のタスクをいつ実行するかを知っています。タスクを実行する方法は別の問題です。インタラクティブにしたい場合は、タスクごとに新しいスレッドを作成できます。または、それらをシリアル化して、マネージャー スレッド内から実行することもできます。

于 2013-07-10T08:09:48.840 に答える