web-dev-qa-db-ja.com

C ++プログラムに時間遅延を追加するにはどうすればよいですか?

私はC++プログラムに時間遅延を追加しようとしていますが、私が試すことができることや見ることができる情報について誰かが何か提案があるかどうか疑問に思っていましたか?

この時間遅延をどのように実装するかについての詳細があればいいのですが、時間遅延を追加する方法の詳細がわかるまで、これをどのように実装すればよいのかわかりません。

67
Matt Pascoe

Win32: Sleep(milliseconds) は何をするか

unix: usleep(microseconds) はあなたが望むものです。

sleep()は数秒しかかかりませんが、これはしばしば長すぎます。

65
#include <unistd.h>
usleep(3000000);

これも3秒間スリープします。ただし、数値をもう少し調整できます。

27
Samir Talwar

シンプルなものが欲しいですか

sleep(3);
10
J.J.

これは、スレッドがスリープする時間の長さがスリープ期間に近いことを保証するものではなく、スレッドが実行を継続するまでの時間が少なくとも望ましい量になることのみを保証することに注意してください。実際の遅延は、状況(特に問題のマシンの負荷)によって異なり、希望のスリープ時間よりも数桁大きくなる場合があります。

また、スリープする必要がある理由をリストしませんが、一般的に同期の方法として遅延を使用することは避けてください。

8
Wedge

chronoライブラリを含めると、"_sleep(milliseconds);"(引用符なし)がWin32でうまく機能することがわかりました。

例えば:

#include <chrono>

using namespace std;

main
{
    cout << "text" << endl;
    _sleep(10000); // pauses for 10 seconds
}

寝る前に必ず下線を入れてください。

3
ARoberts

マイクロ秒の精度が必要な場合は、select(2)を使用することもできます(これはusleep(3)を持たないプラットフォームで動作します)

次のコードは1.5秒待機します。

#include <sys/select.h>
#include <sys/time.h>
#include <unistd.h>`

int main() {
    struct timeval t;
    t.tv_sec = 1;
    t.tv_usec = 500000;
    select(0, NULL, NULL, NULL, &t);
}

`

3

はい、おそらく睡眠はここで選択する機能です。関数に渡される時間は、呼び出しスレッドが非アクティブになる最小時間であることに注意してください。したがって、たとえば、5秒でsleepを呼び出すと、スレッドが少なくとも5秒間スリープすることが保証されます。 OSの動作に応じて、6、8、または50になります。 (最適なOS実行中、これは5に非常に近くなります。)
スリープ機能のもう1つの便利な機能は、0を渡すことです。これにより、スレッドからコンテキストスイッチが強制的に実行されます。

追加情報:
http://www.opengroup.org/onlinepubs/000095399/functions/sleep.html

2
Marcin

cppの出力を固定時間遅延させるには、Sleep()関数のwindows.hヘッダーファイル構文をSleep()関数として使用して、Sleep(time_in_ms)を使用できます。

cout<<"Apple\n";
Sleep(3000);
cout<<"Mango";

出力。上記のコードはAppleを出力し、3秒待ってからMangoを出力します。

1

このコードスニペットを試すことができます。

#include<chrono>
#include<thread>

int main(){
    std::this_thread::sleep_for(std::chrono::nanoseconds(10));
    std::this_thread::sleep_until(std::chrono::system_clock::now() + std::chrono::seconds(1));
}
1
Jayesh Rathod

構文:

void sleep(unsigned seconds);

sleep()は、間隔(秒)の間実行を一時停止します。 sleepを呼び出すと、引数secondsで指定された秒数の間、現在のプログラムの実行が中断されます。間隔は、最も近い100分の1秒またはオペレーティングシステムクロックの精度のいずれか低い方の精度のみです。

0
GEOCHET

他の多くの人が睡眠に関する良い情報を提供しています。私は、睡眠が最も適切な解決策になることはめったにないというウェッジに同意します。

何かを待っているときに寝ている場合は、実際にそのこと/イベントを待っている方が良いでしょう。これについては条件変数を見てください。

どのOSでこれを実行しようとしているのかわかりませんが、スレッドと同期については Boost Threading ライブラリ( Boost Condition Varriable )を参照できます。

非常に短い期間待機しようとしている場合、もう一方の極端に移動すると、ハックスタイルのオプションがいくつかあります。 「スリープ」が実装されていない何らかの組み込みプラットフォームで作業している場合は、空のボディで単純なループ(for/whileなど)を試すことができます(コンパイラーが最適化しないように注意してください)。もちろん、この場合、待機時間は特定のハードウェアに依存します。本当に短い「待機」には、アセンブリの「no​​p」を試すことができます。私はこれらがあなたが求めているものだと非常に疑いますが、なぜあなたが待つ必要があるのか​​を知らずに、より具体的にするのは難しいです。

0
Michael

Windowsでは、Windowsライブラリを含めて「Sleep(0);」を使用できます。プログラムをスリープ状態にします。ミリ秒を表す値を取ります。

0
Zee JollyRoger