время — Сравнение Длительности / Секунды в C ++ с использованием хронографа не работает, как предполагалось?

РЕДАКТИРОВАТЬ: работает просто отлично, я испортил в другом месте моего кода.

Я пытаюсь увеличить целое число раз в минуту, используя 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;

}
}
}

-1

Решение

Вот более безопасный и читаемый способ написания этого кода:

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]