C++におけるSleep関数解析

1855 ワード

linuxのsleep関数のプロトタイプは次のとおりです.
        unsigned int sleep(unsigned int seconds);
MFCのSleep関数のプロトタイプは次のとおりです.
        void Sleep(DWORD dwMilliseconds);
すなわち,Linux下(使用するgccのライブラリ),sleep()関数は秒単位,sleep(1);休眠1秒です.MFCの下のsleep()関数はマイクロ秒単位で、sleep(1000)である.休眠1秒です.なるほど.Linuxでも微妙な単位で休眠する場合は、スレッド休眠関数:void usleep(unsigned long usec);もちろん、使うときは#includeを忘れないでね.
また、linuxの下にはextern void delay(unsigned int msec)としてモデル化されたdelay()関数があります.msec*4ミリ秒を遅延することができます.つまり、1秒を遅延したい場合はdelay(250)を使用することができます.
自分でもsleep関数を書くことができます.
#include 

void sleep(int n)
{
    int st  = clock();
    while ((clock() - st) <= n)
    	;
}

linuxでのC言語プログラミングでは、sleep関数はプロセスを一定の秒数スリープさせ、ポイントになってから自動的に実行を再開するのに便利です.しかしながら、sleep関数も、linux信号への応用を含むいくつかのプロセスを組み合わせたものである.
私は全文を4つの部分に分けます.
さぎょうげんり
寝る秒数、起きる時間を設定する
眠りの実現
サンプル・プログラムおよびコメント
さぎょうげんり
a)寝る秒数を設定する
b)寝る
c)何時に起きますか.
寝る秒数、起きる時間を設定する
各プロセスにはプライベート目覚まし時計があり、alarm(秒数)関数で目覚まし時計を設定できます.ポイントになると、プライベート目覚まし時計はプロセスにSIGALRMの信号を送信します.カスタム処理関数がバインドされていない場合、デフォルトの操作はプロセスを殺すことです.明らかにsleep関数の実装では、カスタム関数が配置されており、この関数には内容がなく、プロセスの停止を防止するだけです.
眠りの実現
pause()関数はプロセスを一時停止できます.
サンプル・プログラムおよびコメント
このプログラムではsleep関数の実装を模倣し,タイミング4秒を実現した.プログラムの効果は以下の通りです.
#include
#include
 
#define SHHHH
 
main()
{
    //        
    void wakeup(int);
    //         4 
    printf("about to sleep for 4 seconds
"); // SIGALRM wakeup signal(SIGALRM,wakeup); // 4 alarm(4); // , pause(); // , wakeup( SHHHH) // wakeup , // pause() printf("Morning so soon?
"); } void wakeup(int signum) { #ifndef SHHHH printf("Alarm received from kernel
"); #endif }