wird das folgende Stück Code Lassen Sie haben, dass einfach die Dauer von std::this_thread::sleep_for
mit 20ms genannt misst: wie mit Toolset v120 std :: this_thread :: sleep_for schläft kürzer als in VS2015 erwartet
#include <iostream>
#include <chrono>
#include <thread>
using namespace std;
using namespace std::chrono;
int main()
{
for (int i = 0; i < 20; i++)
{
auto start = steady_clock::now();
this_thread::sleep_for(milliseconds(20));
auto end = steady_clock::now();
duration<double, milli> elapsed = end - start;
cout << "Waited " << elapsed.count() << " ms\n";
}
}
Sobald er ausgeführt wird kompiliert (VS2013 ist) bekomme ich Ergebnisse wie erwartet, das heißt:
Waited 20.0026 ms
Waited 20.0025 ms
Waited 20.0025 ms
Waited 20.0026 ms
Waited 20.0025 ms
Waited 20.0025 ms
Waited 20.0026 ms
Waited 20.0025 ms
Waited 20.0025 ms
Waited 20.0026 ms
aber wenn sie mit VS2015 des Toolset v140 laufen, sind die Ergebnisse etwas überraschend und nicht respektieren das Versprechen von beiden msdn und cppreference.comsleep_for
Beschreibungen (dass sleep_for
blockiert die Ausführung des aktuellen Thread für mindestens der angegebenen sleep_duration
). Sie sind wie folgt:
Waited 19.7793 ms
Waited 19.9415 ms
Waited 19.6056 ms
Waited 19.9687 ms
Waited 19.608 ms
Waited 19.589 ms
Waited 20.5435 ms
Waited 19.5669 ms
Waited 19.6802 ms
Waited 19.5381 ms
Wie seine möglich und wie kann ich VS2015 die machen sleep_for
schlafen mindestens so lange wie erwartet?
Grüße, Dawid
EDIT:
Wie gewünscht sind meine Einstellungen und OS Details sind:
OS:
Windows 7 Professional 64-Bit-
von Visual Studios: 2010 Ultimate 2013 Gemeinschafts 2015 Professional mit einem Update 1
Compiler-Einstellungen:
Standardeinstellungen für Win32-Konsolenanwendung,
einem Debug und Freigabekonfigurationen,
beliebige x86 und x64 Zielplattform Archit ectures
Ich verwende 'sleep_until()' in einer Schleife im Falle eines frühen Aufwachens. Ich denke, dass frühes Aufwachen nicht passieren sollte, aber zumindest auf GCC Linux scheint ein frühes Aufwachen immer dann zu passieren, wenn der Prozess ein Signal erhält (offensichtlich nicht Ihr Problem hier). – Galik
Ich sehe nicht die gleichen Ergebnisse lokal oder z. auf http://rextester.com/l/cpp_online_compiler_visual (es verwendet auch VS2015). Erwägen Sie, weitere Informationen über Ihre genauen Compilereinstellungen, Zielarchitektur, Hostbetriebssystem, Maschinenspezifikationen usw. hinzuzufügen. – Yirkha
@Yirkha: Ich habe mehr Details über meine Bedingungen in der Beschreibung hinzugefügt. Wie für Ihre Ergebnisse - es wird aussehen wie kleine Unterschiede in meinem System zu jagen. – dawid