Nun. Ich habe Win10 x64 und diesen ziemlich einfachen Code:
%Vor% Ja. Der Code funktioniert genau so, wie ich es erwarte. Es zeigt '!' jede Sekunde.
Aber wenn ich meine Ortszeit ändere (minus 1 Stunde / Minute), dauert es ewig.
Wenn ich cv.wait_for(...)
durch WinAPI Sleep(1000)
ersetze, funktioniert es gut. Auch WinAPI SleepConditionVariableCS
funktioniert gut.
Ich habe es versucht:
%Vor%Und es gibt mir das gleiche Ergebnis.
BTW: Das Verhalten der Aufrufe wie std::this_thread::sleep_for
, std::this_thread::sleep_until
ist gleich.
Die Frage ist also: Ist es möglich, std::condition_variable
mit dem erwarteten Verhalten zu verwenden? Oder ich muss es nur durch meinen eigenen CONDITION_VARIABLE Wrapper ersetzen?
Dies war ein bekannter Fehler mit VS2015 condition_variable
, der leider ABI-break zu beheben ist. Ich habe es in unserer nächsten Hauptversion behoben (ich habe die Implementierung der Bedingungsvariablen von Grund auf neu geschrieben), aber ich weiß nicht, wann das als nächstes passieren wird. Beachten Sie, dass VS2017 eine Nebenversion war, soweit es die Standardbibliotheken betrifft.
Das Problem ist, dass der API-Vertrag, der von msvcp140.dll
bereitgestellt wird, eine absolute Zeit gegenüber dem Systemtakt erwartet. Wenn sich also die Systemuhr ändert, ändert sich die effektive Wartezeit. Der Standard erlaubt die Implementierung eines instationären Takts aus einer stabilen Uhr heraus, aber nicht umgekehrt; Meine Vorgänger haben dieses Memo offenbar nicht bekommen:)
Tags und Links c++ c++11 winapi visual-studio-2017 visual-studio-2015