2つのタスクを定期的に実行する必要があるプログラムを実行しようとしています。 たとえば、タスク1を10秒ごとに実行し、タスク2を20秒ごとに実行します。複数のスレッドを開始するC++スレッド
私が考えているのは、それぞれがタイマー付きの2つのスレッドを作成することです。スレッド1は、10秒ごとにタスク1の新しいスレッドを起動します。スレッド2は20秒ごとにタスク2の新しいスレッドを起動します。
私の疑問は、以前のタスク1が完了していない場合は、新しいタスク1を起動する方法ですか?
while (true)
{
thread t1 (task1);
this_thread::sleep_for(std::chrono::seconds(10));
t1.join();
}
私はこれを試していましたが、この方法では、前のタスクが完了すると新しいタスク1が開始されます。
編集:
基本的に私はタスクスケジューラを実装したいと思います。 タスク1をX秒ごとに実行します。 タスク2をY秒ごとに実行します。 私はこのような何かに考えていた:
thread t1 (timer1);
thread t2 (timer2);
void timer1()
{
while (true)
{
thread t (task1);
t.detach()
sleep(X);
}
}
同じタイマ2とタスク2
[MCVE]を投稿してください。実際に 'task1'とは何ですか? –
それは重要ですか?私はまだtask1を実装していません。しかし、いくつかの値を計算してデータベースに格納する単純な関数です – jcmpoliveira
2つのtask1を同時に実行する必要がありますか?あなたは1つのtask1スレッドを手放すことができます。ここで、task1が早く終了すると、スレッドは再び実行されるまでスリープします。そうでなければループして再実行しますか? – user4581301