c sleep how use sleep function c programs
このC ++スリープチュートリアルでは、C ++のスリープ関数について説明し、スレッドをスリープ状態にする方法を説明します。また、他の機能についても学びます。 usleep:
プロセス、タスク、またはスレッドであるコンピュータプログラムは、特定の時間「スリープ」するか、非アクティブ状態になる可能性があります。この期間、実行は一時停止されます。スリープの時間間隔が経過するか、信号または割り込みによって実行が再開されると、実行が再開されます。
プログラム(タスク、プロセス、またはスレッド)をスリープ状態にするために、スリープシステム呼び出しを利用します。一般的なスリープシステムコールは、プログラムがスリープまたは非アクティブのままでいるために必要な時間を示すパラメータとして時間を取ります。
=> ここで完全なC ++トレーニングシリーズを確認してください。
また、このチュートリアルで説明するusleep()およびthread :: sleep関数もあります。提供される時間は主にミリ秒、マイクロ秒、または秒であり、それに応じて、プログラムをスリープ状態にすることができるさまざまな関数があります。
学習内容:
スリープ()機能
C ++言語は、独自のスリープ機能を提供しません。ただし、次のようなオペレーティングシステムの特定のファイル unistd.h Linuxおよび Windows.h Windowsの場合、この機能を提供します。
LinuxまたはUNIXオペレーティングシステムを使用する場合、を使用するには、プログラムに「unistd.h」ヘッダーファイルをインクルードする必要があります。 睡眠 () 関数。
Windowsオペレーティングシステムを使用しているときに、sleep()関数を使用するには、「Windows.h」ヘッダーを含める必要があります。したがって、クロスプラットフォームプログラムを作成するために、次のようなコードを使用して、いずれかのヘッダーが使用されるようにすることができます。
#ifdef _WIN32 #include #else #include #endif
スリープ機能について以下に説明します。
関数プロトタイプ:
符号なしスリープ(符号なし秒);
パラメーター:
秒=> プログラムの実行が中断される時間(秒単位)
戻り値:
0 => 要求された時間が経過したときにスリープが戻った場合。
スリープがシグナルによって中断された場合、スリープされていない量(指定された要求期間から実際の経過時間を引いたもの)が返されます。
説明:
sleep()関数は、プログラムまたはそれが呼び出されたプロセスに、関数パラメーターで指定された秒単位の期間、その実行を一時的に中断させます。要求された時間が経過するか、シグナルまたは割り込みが関数に配信されるまで、実行は中断されます。
ただし、システムが他のアクティビティをスケジュールしている場合は、一時停止時間が長くなる可能性があります。
以下に示すのは、2つのcoutステートメント間でsleep関数を使用するC ++プログラムです。
PCスキャンと修復ツールウィンドウ10
#ifdef _WIN32 #include #else #include #endif #include #include using namespace std; int main() { cout << 'Hello '; cout.flush(); sleep(10); cout << 'World'; cout << endl; return 0; }
出力:
こんにちは世界
上記のプログラムでは、「Hello」を出力してから10秒間隔でスリープコマンドを実行します。コンパイラは、「Hello」を出力してから10秒間待機し、「World」を出力します。
注意: 読者はこのプログラムを実行して、sleepコマンドの動作を実際に理解する必要があります
Usleep()機能
ヘッダー「unistd.h」は、プログラムの実行を指定された期間中断できるさらに別の関数「usleep()」を提供します。動作は、すでに説明したsleep()関数に似ています。
関数プロトタイプ: int usleep(useconds_t useconds);
パラメータ:useconds => 実行が中断されるマイクロ秒数
戻り値:
0 => Usleepは正常に戻りました。
-1&errno => 関数が失敗しました。
説明:
関数usleep()は、呼び出しスレッドの実行をusecondsマイクロ秒の間、または実行を中断するシグナルがスレッドに配信されるまで中断します。
usleep関数で使用されるタイマー値の粒度は、実装固有の場合があります。実装で指定された粒度よりも細かい粒度が必要な場合は、実際のタイマー値が次にサポートされる値に切り上げられます。
以下に、usleep()関数を示す例を示します。
#include #include #include using namespace std; int main() { cout << 'Hello '; cout.flush(); usleep(10000); cout << 'World'; cout << endl; return 0; }
出力:
こんにちは世界
上記の出力に示されているように、usleep関数の期間を10000マイクロ秒として指定し、sleep関数を使用する前のプログラムと同様に、「HelloWorld」文字列を出力します。
スレッドスリープ(sleep_for&sleep_until)
C ++ 11は、スレッドをスリープ状態にするための特定の関数を提供します。
2つの機能があります:
Std :: this_thread :: sleep_for
関数プロトタイプ:
template void sleep_for( const std::chrono::duration& sleep_duration );
パラメーター: sleep_duration =>スリープするまでの時間
戻り値: 無し
説明: sleep_for()関数はヘッダーで定義されています。 sleep_for()関数は、少なくとも指定された時間、つまりsleep_durationの間、現在のスレッドの実行をブロックします。
この関数は、スケジューリングアクティビティまたはリソース競合の遅延により、指定された時間よりも長い時間ブロックする場合があります。
sleep_forの使用法を示すC ++の例を以下に示します。
#include #include #include using namespace std; int main() { cout << 'Hello I'm waiting....' << endl; this_thread::sleep_for(chrono::milliseconds(20000) ); cout << 'Waited 20000 ms
'; }
出力:
こんにちは私は待っています…。
2000ミリ秒待機
上記のプログラムでは、20000ミリ秒の指定されたスリープ期間があります。これは、スレッドが操作を再開する前に20000ミリ秒間ブロックすることを意味します。
Std :: this_thread :: sleep_until
関数プロトタイプ:
template void sleep_until( const std::chrono::time_point& sleep_time );
パラメーター: sleep_time =>スレッドがブロックされるまでの時間。
戻り値: 無し
説明: この関数はヘッダーで定義されています。 sleep_until()関数は、sleep_timeが経過するまでスレッドの実行をブロックします。他の関数と同様に、この関数も、スケジューリングアクティビティまたはリソース競合の遅延により、指定された時間よりも長い時間ブロックする場合があります。
sleep_until関数のC ++プログラムを以下に示します。
#include #include #include using namespace std; void current_time_point(chrono::system_clock::time_point timePt) { time_t timeStamp = chrono::system_clock::to_time_t(timePt); cout << std::ctime(&timeStamp) << endl; } void threadFunc() { cout<<'Current Time :: '; current_time_point(chrono::system_clock::now()); chrono::system_clock::time_point timePt = chrono::system_clock::now() + chrono::seconds(60); cout << 'Sleeping Until :: '; current_time_point(timePt); this_thread::sleep_until(timePt); cout<<'Woke up...Current Time :: '; current_time_point(chrono::system_clock::now()); } int main() { std::thread th(&threadFunc); th.join(); return 0; }
出力:
現在の時刻:: 2019年9月19日木曜日12:52:01
寝るまで::木9月19日12:53:012019
目が覚めた…現在の時刻:: 2019年9月19日木曜日12:53:01
このプログラムでは、スレッドを60秒間、つまり1分間スリープさせます。 1分が完了すると;スレッドが起動し、現在の時刻を出力します。
よくある質問
Q#1)C ++でsleep()は何をしますか?
回答: Sleep()関数は、指定された期間、プログラムの実行を一時停止します。この期間は、sleep()関数の引数として指定されます。
Q#2)C ++でスリープするためのヘッダーファイルは何ですか?
回答: スリープのヘッダーは、LINUX / UNIXオペレーティングシステムの場合は「unistd.h」、Windowsオペレーティングシステムの場合は「Windows.h」です。 「sleep_for」および「sleep_until」関数を使用するスレッドスリープの場合、ヘッダーが使用されます。
Q#3)#include Unistd Hの用途は何ですか?
回答: ヘッダー「Unistd.h」は、プログラムの実行を一時停止するためのsleep()関数を定義するヘッダーです。
結論
このsleep()関数のチュートリアルでは、sleep関数とusleep()関数について説明しました。これらは、sleep関数とthread sleep関数、sleep_forおよびsleep_untilと同じです。スリープ()関数とusleep()関数は、スリープ時間を指定するために使用される時間単位を除いて同じです。
sleep()関数では、時刻は秒単位で指定されますが、usleep()関数では、時刻はマイクロ秒単位で指定されます。スレッド関数sleep_for()は、引数として指定された特定の期間、スレッドの実行を一時停止します。 2番目のスレッド関数sleep_until()は、指定された時間が経過するまでスレッドの実行を一時停止します。
推奨読書= >> スレッドテストとは何ですか?
説明したすべてのスリープ機能は、スケジューリングやその他のリソース固有の遅延によっては、戻るまでに時間がかかる場合があります。
=> ここで人気のあるC ++トレーニングシリーズを読んでください。