ホームページ >バックエンド開発 >C++ >Windows で Sleep(1) が 15 ミリ秒スリープしているように見えるのはなぜですか?

Windows で Sleep(1) が 15 ミリ秒スリープしているように見えるのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-10-28 00:23:02723ブラウズ

Why Does Sleep(1) Seem to Sleep for 15ms in Windows?

Windows での Sleep() 関数の動作

Sleep() 関数を呼び出すと、通常、スレッドは指定された期間実行を一時停止します。ただし、場合によっては、スレッドが長時間スリープしているように見える場合があります。

Windows 7 などの Windows バージョンでは、Sleep() はタイム クォンタムで動作します。これは、ゼロ以外の遅延が最も近い量子に切り上げられることを意味し、その結果、スリープ期間がわずかに長くなる可能性があります。

この動作の一般的な症状は、Sleep(1) の呼び出しによって実際にエラーが発生する可能性があることです。約15ミリ秒のスリープ。これは、オペレーティング システムのスケジューラが通常 15.6 ミリ秒のクォンタムを使用するためです。

これを説明するために、次のコード スニペットが提供されています。

<code class="cpp">#include <iostream>
#include <ctime>
#include <Windows.h>

void test(void)
{
    std::cout << "Testing 1ms sleep." << std::endl;

    for (unsigned int i = 0; i < 10; i++)
    {
        std::clock_t startClocks = std::clock();

        Sleep(1);

        std::clock_t clocksTaken = std::clock() - startClocks;
        std::cout << "Time: " << clocksTaken << "ms." << std::endl;
    }
}</code>

このコードは Windows 7 で実行される可能性があります。スリープ期間は 1 ミリ秒ではなく約 15 ミリ秒と報告されます。

したがって、Windows で採用されているタイム クォンタム システムにより、Sleep() が指定された遅延よりわずかに長い期間スリープするのが一般的な動作です。

以上がWindows で Sleep(1) が 15 ミリ秒スリープしているように見えるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。