Heim  >  Artikel  >  Backend-Entwicklung  >  Warum scheint Sleep(1) unter Windows 15 ms lang zu schlafen?

Warum scheint Sleep(1) unter Windows 15 ms lang zu schlafen?

Susan Sarandon
Susan SarandonOriginal
2024-10-28 00:23:02636Durchsuche

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

Verhalten der Sleep()-Funktion in Windows

Beim Aufruf der Sleep()-Funktion unterbricht ein Thread normalerweise die Ausführung für die angegebene Dauer. In einigen Fällen kann es jedoch so aussehen, als ob der Thread für einen längeren Zeitraum schläft.

In Windows-Versionen wie Windows 7 arbeitet Sleep() mit einem Zeitquantum. Dies bedeutet, dass jede Verzögerung ungleich Null auf das nächste Quantum aufgerundet wird, was zu etwas längeren Schlafdauern führen kann.

Ein häufiges Symptom dieses Verhaltens ist, dass ein Aufruf von Sleep(1) tatsächlich eine verursachen kann Schlaf von ca. 15 ms. Dies liegt daran, dass der Betriebssystem-Scheduler normalerweise ein Quantum von 15,6 ms verwendet.

Zur Veranschaulichung wird ein Codeausschnitt bereitgestellt:

<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>

Bei Ausführung unter Windows 7 wird dieser Code wahrscheinlich angezeigt Melden Sie Schlafdauern von etwa 15 ms statt 1 ms.

Daher ist es typisch, dass Sleep() aufgrund des von Windows verwendeten Zeitquantensystems für einen etwas längeren Zeitraum als die angegebene Verzögerung schläft.

Das obige ist der detaillierte Inhalt vonWarum scheint Sleep(1) unter Windows 15 ms lang zu schlafen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn