РЕДАКТИРОВАТЬ: работает просто отлично, я испортил в другом месте моего кода.
Я пытаюсь увеличить целое число раз в минуту, используя C ++ 11 хронографическую библиотеку. По некоторым причинам сравнение не работает должным образом: оно просто возвращает true каждый раз. Что-то не так с приведением к секундам? Разве результат не должен быть int, содержащим разницу в обоих моментах времени в секундах?
Буду очень признателен за вашу помощь! Вот код:
std::chrono::time_point<std::chrono::system_clock> starttime = std::chrono::system_clock::now();
int timeLine = 0;
int main() {
while (true) {
std::chrono::time_point<std::chrono::system_clock> now = std::chrono::system_clock::now();
int seconds = timeLine * 60;
if ((std::chrono::duration_cast<std::chrono::seconds>(starttime - now)).count() + seconds <= 0) {
timeLine++;
nextConstellation();
cout << "Timeline: " << timeLine << endl;
}
}
}
Вот более безопасный и читаемый способ написания этого кода:
std::chrono::time_point<std::chrono::system_clock> starttime = std::chrono::system_clock::now();
int timeLine = 0;
int main() {
while (true) {
std::chrono::time_point<std::chrono::system_clock> now = std::chrono::system_clock::now();
std::chrono::seconds seconds = timeLine * std::chrono::minutes{1};
if (starttime - now + seconds <= std::chrono::seconds{0}) {
timeLine++;
nextConstellation();
std::cout << "Timeline: " << timeLine << std::endl;
}
}
}
Короче говоря, оставайтесь в системе хронографического типа и доверяйте ей, чтобы она делала преобразования единиц для вас, неявно, где это возможно.
Или, может быть, даже проще:
// ...
auto timelimit = timeLine * std::chrono::minutes{1};
if (now - starttime >= timelimit) {
// ...
А если в C ++ 14 добавить using namespace std::chrono_literals
а также:
auto timelimit = timeLine * 1min;
Других решений пока нет …