У меня есть следующий, который прекращает выполнение программы через определенное время.
#include #include using namespace std; int main( ) < time_t timer1; time( time_t timer2; double second; while(1) < time( second = difftime(timer2,timer1); //check if timediff is cross 3 seconds if(second >3) < return 0; >> return 0; >
Является ли выше программа работать, если время увеличивается с 23:59 до 00:01?
Если есть другой лучший способ?
Лучший ответ:
time() возвращает время с момента Epoch (00:00:00 UTC, 1 января 1970 года), измеренное в секундах. Таким образом, время суток не имеет значения.
Если у вас есть С++ 11, вы можете посмотреть на этот пример:
#include #include int main()
В качестве альтернативы я бы пошел с библиотекой потоков по вашему выбору и использовал функцию сна Thread. В большинстве случаев лучше отправить поток в режим сна, а не ожидание.
Вы можете использовать std::chrono::steady_clock в С++ 11. Посмотрите пример в статическом методе now для примера:
Самый БЫСТРЫЙ стандартный цикл Python − Интеграция с языком Си
using namespace std::chrono; steady_clock::time_point clock_begin = steady_clock::now(); std::cout
Источник: techarks.ru
Arxont
Спросили меня, вроде бы простой вопрос — «Как приостановить выполнение программы на X секунд». Естественно в C#. Первый (и очень часто единственный) вариант это Thread.Sleep(1000); Но для порядка решил погуглить и покопаться на stackoverflow.
И вот к чему я пришел —
Используйте
- System.Timers.Timer
- System.Windows.Forms.Timer
- System.Threading.Timer
Если предположить, что у вас однопоточное приложение (а они большинство), ваше приложение прекратит отвечать на все запросы, а не просто остановится на время, как можно подумать.
Для контроля (сколько времени реально выполнялось) можно использовать System.Diagnostics.Stopwatcth
Пример кода —
using System; using System.Diagnostics; namespace TimerTest < class Program < static System.Timers.Timer aTimer; static Stopwatch stopwatch = System.Diagnostics.Stopwatch.StartNew(); static void Main(string[] args) < aTimer = new System.Timers.Timer(2000); aTimer.Elapsed += OnTimedEvent; //Разовое выполнение таймера aTimer.AutoReset = false; aTimer.Enabled = true; Console.WriteLine(«Press the Enter key to continue the program at any time. «); Console.ReadLine(); TimeSpan ts = stopwatch.Elapsed; string elapsedTime = String.Format(«::.», ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds / 10); Console.WriteLine(«RunTime » + elapsedTime); Console.ReadLine(); > private static void OnTimedEvent(Object source, System.Timers.ElapsedEventArgs e) < Console.WriteLine(«The Elapsed event was raised at «, e.SignalTime); stopwatch.Stop(); > > >
Источник: arxont.blogspot.com
Как измерить время выполнения кода | Изучение С++ для начинающих. Урок #145
Thread. Sleep Метод
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Приостанавливает текущий поток на заданное время.
Перегрузки
Приостанавливает текущий поток на заданное количество миллисекунд.
Приостанавливает текущий поток на заданное время.
Sleep(Int32)
Приостанавливает текущий поток на заданное количество миллисекунд.
public: static void Sleep(int millisecondsTimeout);
public static void Sleep (int millisecondsTimeout);
static member Sleep : int -> unit
Public Shared Sub Sleep (millisecondsTimeout As Integer)
Параметры
millisecondsTimeout Int32
Количество миллисекунд, на которое приостанавливается поток.
Если значение аргумента millisecondsTimeout равно нулю, поток освобождает оставшуюся часть своего интервала времени для любого потока с таким же приоритетом, готовым к выполнению. Если других готовых к выполнению потоков с таким же приоритетом нет, выполнение текущего потока не приостанавливается.
Исключения
Значение времени ожидания является отрицательной величиной и не равно Infinite.
Примеры
В следующем примере метод используется для Sleep блокировки основного потока приложения.
using namespace System; using namespace System::Threading; int main() < for (int i = 0; i < 5; i++) < Console::WriteLine(«Sleep for 2 seconds.»); Thread::Sleep(2000); >Console::WriteLine(«Main thread exits.»); > /* This example produces the following output: Sleep for 2 seconds. Sleep for 2 seconds. Sleep for 2 seconds. Sleep for 2 seconds. Sleep for 2 seconds. Main thread exits. */
using System; using System.Threading; class Example < static void Main() < for (int i = 0; i < 5; i++) < Console.WriteLine(«Sleep for 2 seconds.»); Thread.Sleep(2000); >Console.WriteLine(«Main thread exits.»); > > /* This example produces the following output: Sleep for 2 seconds. Sleep for 2 seconds. Sleep for 2 seconds. Sleep for 2 seconds. Sleep for 2 seconds.
Main thread exits. */
Imports System.Threading Class Example Shared Sub Main() For i As Integer = 0 To 4 Console.WriteLine(«Sleep for 2 seconds.») Thread.Sleep(2000) Next Console.WriteLine(«Main thread exits.») End Sub End Class ‘ This example produces the following output: ‘ ‘Sleep for 2 seconds. ‘Sleep for 2 seconds. ‘Sleep for 2 seconds. ‘Sleep for 2 seconds. ‘Sleep for 2 seconds. ‘Main thread exits.
Комментарии
Выполнение потока операционной системой не будет запланировано на указанный период времени.
Этот метод изменяет состояние потока, включив в него WaitSleepJoin.
Можно указать Timeout.Infinite для millisecondsTimeout параметра приостановку потока на неопределенный срок. Однако вместо этого рекомендуется использовать другие System.Threading классы, такие как Mutex, Monitor, EventWaitHandleили Semaphore , для синхронизации потоков или управления ресурсами.
Системные часы тикают с определенной скоростью, называемой разрешением часов. Фактическое время ожидания может не совпадать с заданным временем ожидания, так как указанное время ожидания будет скорректировано так, чтобы совпадать с тактами часов. Дополнительные сведения о разрешении часов и времени ожидания см. в разделе Функция спящего режима из системных API Windows.
Этот метод не выполняет стандартную перекачку COM и SendMessage.
Если необходимо выполнить спящий режим в потоке с STAThreadAttribute, но вы хотите выполнить стандартную накачку COM и SendMessage, рассмотрите возможность использования одной из перегрузок Join метода, который задает интервал времени ожидания.
Источник: learn.microsoft.com