timer — метод в C ++ для вызова функции каждые определенное количество минут

Я использую Visual Studio 2012 и C ++, мне нужно вызывать функцию каждые 5 минут, мне удалось это сделать, но она потребляет 25% моего процессора, что далеко от идеала.

Код выглядит следующим образом:

time_t start;
time_t end;
time(&start);
while (1) {
time(&end);
double dif = difftime (end,start);
if (dif >= 300) { autofunction(); time(&start);} else {} }

Есть ли более эффективный для ЦП способ вызова функции каждые 5 минут или какой-либо способ замедлить цикл while?

Любое руководство будет с благодарностью.

2

Решение

В Windows есть Sleep (), и для чего-то, что происходит каждые 300 секунд, это прекрасно. В Windows также есть таймеры, которые могут принимать аргумент timerproc, который является функцией, но учтите, что это функция C, а не C ++, поэтому она не должна быть функцией-членом класса, если она не является статической.

2

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

Так как никто не предложил, вы можете просто создать новый std::thread а также Sleep в этом.

1

Что вы делаете занят ожидания. Вы постоянно проверяете, сколько времени прошло, и тратите время процессора.

Так как вы на окнах, Использование очередей таймера может быть интересным.

Это создает таймер с функцией обратного вызова. Вы можете выполнять другую работу, ожидая истечения таймера.

0

Я думаю, что лучший ответ будет зависеть от некоторых деталей того, что вы делаете. Если вам нужно, чтобы оно составляло приблизительно 5 минут, возможно, вы можете поместить вычисление истекшей продолжительности в более удобное для программирования место, и вы начнете задание впервые через 5 минут после проверки.

В противном случае, похоже, что @BartekBanachewicz имеет лучшее предложение для запуска потока, который использует sleep— без блокировки вашего основного потока, делающего все, что вы делаете. Пока ваш основной поток будет определенно работать дольше, чем 5 минут, не должно быть проблемой всегда повторятьjoin() поток в конце, или когда-либо.

Преимущество использования потоков состоит в том, что они не требуют каких-либо специфических для Windows вещей, например Предложение @ OlafDietsche, независимо от того, какие очереди таймера. С c ++ 0x потоки очень просты в использовании, смотрите: http://en.cppreference.com/w/cpp/thread/thread; http://www.justsoftwaresolutions.co.uk/threading/multithreading-in-c++0x-part-1-starting-threads.html

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