Создание секундомера в visual studio
Уроки программирования, алгоритмы, статьи, исходники, примеры программ и полезные советы
Сегодня мы создадим программу, которая будет при запуске показывать нам цифровые часы и дату.
Для начала создаём форму. У нас она такая:
Всё, что у нас тут есть — это два Label’a + Timer.
Настраиваем Label’ы, переименовываем, увеличиваем шрифт — всё по усмотрению программиста.
Теперь переходим к коду, щёлкнув правой кнопкой мыши по форме и выбрав соответствующую команду.
Сразу после строки public partial class Form1 : Form объявим таймер. Делается это так:
Объявляем мы его в самом начале, чтобы все функции, которые у нас будут внутри, принимали его в расчёт (если он будет объявлен в какой-то одной отдельной функции, то вторая функция не будет его видеть).
Теперь рам надо включить наш таймер. Для этого мы возвращаемся в форму и дважды щёлкаем на неё левой кнопкой мыши.
Нас переносит в код, который будет срабатывать при загрузке формы (то есть, с самого начала работы программы). Здесь мы пишем следующее:
Первая строка устанавливает интервал обновления таймера. Число 1000 означает, что таймер будет обновляться каждые 1000 миллисекунд, т.е. каждую секунду.
Вторая строка очень важна — она срабатывает при каком-либо событии «Tick» в таймере. У нас она будет срабатывать каждые 1000 миллисекунд, пока включен таймер. Именно благодаря ней пользователь будет видеть смену часов, минут и секунд на циферблате. Само событие мы опишем ниже в функции timer1_Tick.
Третьей строкой мы запускаем наш таймер.
Теперь мы возвращаемся в форму и дважды кликаем на значке таймера ( ) внизу.
Вот и открылась у нас функция timer1_Tick. Мы запишем в неё определённый код, и каждые 1000 миллисекунд этот код будет исполняться заново.
Внутри нашей функции мы сначала объявим некоторые переменные:
В переменную h мы будем записывать часы, в переменную m — минуты, в s — секунды.
Переменная строкового типа time нам нужна, чтобы мы записали первые три переменные в строку для вывода в форму.
Теперь мы сделаем один «трюк», предназначенный скорее для красоты вида, нежели для функционала и качества работы.
Дело в том, что мы привыкли видеть форму времени в виде, грубо говоря, 00:00:00 , то есть две цифры на вывод часов, две цифры на минуты и две цифры на секунды (например, 06:03:09 или 12:01:05).Время же из свойства DateTime.Now не имеет нулей перед цифрами, которые меньше десяти (иначе говоря, время будет выглядеть так: 6:3:9 или 12:1:5). Согласитесь, это не очень удобно и привычно видеть. Поэтому мы исправим благодаря оператору условия if.
То же самое мы проделываем с минутами и секундами, не забывая при этом между часами и минутами, а также минутами и секундами поставить двоеточие.
Теперь давайте, для большего понимания, что мы сделали, поговорим о работе строки time. Мы поочерёдно записываем в неё часы (с нулём или без), минуты (аналогично) и секунды (аналогично). Между ними мы ставим двоеточие. Именно поэтому после первых двух условий у нас имеются строки
Итак, в самом начале работы программы строка time у нас пустая (мы выше объявили её такой, с правой стороны поставив пустые кавычки: string time = «» ). Как только запускается таймер, в строку сначала записываются часы, принимая во внимание, больше ли 10 это время или меньше.
То есть вместо пустого пространства в строке теперь что-то типа «12», если у нас в данный момент 12 часов. После этого в строку записывается двоеточие, теперь строка выглядит так: «12:». Затем мы записываем минуты, опять учитывая, сколько знаков в них. Получится, например, так :»12:06″. Опять ставим двоеточие: «12:06:». Заканчивается запись секундами: «12:06:34». И перезаписываться наша строка от пустоты до полной формы времени будет каждые 1000 миллисекунд, то есть каждую секунду, чтобы мы видели, как меняется циферблат секунд, а впоследствии и минут с часами.
Однако пока что наша строка просто существует, но пользователь не видит её, не видит, сколько время в данный момент.
Поэтому мы выводим нашу строку в форму через Label. У нас это label2, с наиболее крупным шрифтом.
Попросили сделать секундомер для судейства. Легко, правда? Вот только таймеры в студии заторможенные, у них погрешность, вроде как, 55 миллисекунд. А они мне важны для точности! Есть ли способ запилить секундомер с точностью хотя бы до сотых секунды? (Лучше до тысячных, но это уже с жиру беситься. )
P.S. гуглил сколько мог, но везде великие учителя показывают одно и тоже, таймер для формы.
На официальном сайте читал кое что о типе таймера System.Timers, но несколько не разобрался в паре вещей, да и проверив этот таймер в оригинале, я обнаружил, что он тоже отстаёт. Возможно я что-то не так понял, или отставание там прописано, не знаю. В общем, помогите, кто может
Оригинальный код из официального сайта
Создание секундомера
Напишите приложение секундомер. При нажатии на кнопку старт должен запускаться таймер. При этом.
Создание секундомера
Необходимо написать секундомер, который начинает работать с момента открытия формы (то есть после.
Создание секундомера с SimpleGUI
1. Создайте таймер с интервалом срабатывания 0.1 секунды, обработчик которого будет увеличивать.
Создание секундомера на JavaScript
Добрый вечер Подскажите, пожалуйста, начинающему надо сделать таймер который посередине страницы.
Windows не относится к OC реального времени.
Такие задачи, в принципе, штатными средствами Winfows не решить.
Также возможны погрешности самого таймера на компе. Всё таки его задача это не точное измерение времени, а формирование тактовых частот. Если долго таймер не корректировать, то на почти всех компах он покажет худшую точность чем самые дешёвые кварцевые часы.
Из имеющихся инструментов, как уже написал КОП, самый точный Stopwatch .
И то там нюансы с потоками есть
Из документации На многопроцессорном компьютере он не имеет значения каком процессоре запускается поток. Тем не менее из-за ошибок в BIOS или слой абстрагирования оборудования (HAL), можно получить различные результаты расчета времени на разных процессорах. Чтобы задать сходство процессоров для потока, используйте ProcessThread.ProcessorAffinity метод. |
Крч, спустя N количество времени, вернулся и написал сам. Спасибо вам, дорогие форумчане, за мегаинформативные ответы, которые мне очень помогли, особенно в нюансах!
Что у меня получилось.
У меня работает, но могут быть ошибки, смотрите внимательно, если копипастите. Сделал пост специально для тех, кто не вдупляет в стопвочи и потоки тем более, и кого отсылают читать толстенные книги, либо дают самые точные, полные, развёрнутые ответы, после которых ну всё понятно сразу!
P.S. Для тех, кто отсылает читать книги. Знаете, бывают ситуации, когда у тебя время ограничено, и тебе надо вникнуть в суть, чтобы что-то сделать (не только в программировании). Так вот, когда есть время, лично я иду учить Роберта Лафоре, но когда надо что-то сделать быстро, иду гуглить. А когда гугол не помогает, только тогда тащусь на форум.
Суть в том, что вместо того, чтобы писать очевидные общие вещи, пишите конктретно, или хотя бы отсылайте туда, где об этом можно предметно почитать/посмотреть/послушать.
In this series of four tutorials, you'll build a math quiz. The quiz contains four random math problems that a quiz taker tries to answer within a specified time.
The quiz uses a Timer control. The code behind this control tracks the elapsed time and checks the quiz taker's answers.
In this third tutorial, you learn how to:
- Add a Timer control.
- Add an event handler for the timer.
- Write code to check the user's answers, display messages, and fill in the correct answers.
Prerequisites
This tutorial builds on previous tutorials, starting with Create a math quiz WinForms app. If you haven't completed those tutorials, go through them first.
Add a countdown timer
To keep track of time during the quiz, you use a timer component. You also need a variable to store the amount of time that's left.
Add an integer variable that's named timeLeft in the same way that you declared variables in previous tutorials. Put the timeLeft declaration right after the other declarations. Your code should look like the following sample.
In Windows Forms Designer, move a Timer control from the Components category of the Toolbox to your form. The control appears in the gray area at the bottom of the design window.
On the form, select the timer1 icon that you just added, and set its Interval property to 1000. Because this interval is in milliseconds, a value of 1000 causes the timer to raise a Tick event every second.
Check the answers
Because the timer raises a Tick event every second, it makes sense to check the elapsed time in a Tick event handler. It's also practical to check the answers in that event handler. If time has run out, or if the answers are correct, the quiz should end.
Before you write that event handler, add a method called CheckTheAnswer() to determine whether the answers to the math problems are correct. This method should be in line with the other methods, such as StartTheQuiz() . Your code should look like the following sample.
This method determines the answers to the math problems and compares the results to the values in the NumericUpDown controls. In this code:
The Visual Basic version uses the Function keyword instead of the usual Sub keyword because this method returns a value.
The if statement uses the Value property of a NumericUpDown control to access the control's current value. In the next section, you use the same property to display the correct answer in each control.
Add an event handler to the timer
Now that you have a way to check the answers, you can write the code for the Tick event handler. This code runs every second, after the timer raises a Tick event. This event handler checks the quiz taker's answers by calling CheckTheAnswer() . It also checks how much time has elapsed in the quiz.
On the form, double-click the Timer control, or select it and then select Enter. These actions add a Tick event handler to the timer. The code editor appears and displays the Tick handler's method.
Add the following statements to the new event handler method.
Each second of the quiz, this method runs. The code first checks the value that CheckTheAnswer() returns.
If all answers are correct, that value is true , and the quiz ends:
- The timer stops.
- A congratulatory message appears.
- The Enabled property of the startButton control is set to true so that the quiz taker can start another quiz.
If CheckTheAnswer() returns false , the code checks the value of timeLeft:
- If this variable is greater than 0, the timer subtracts 1 from timeLeft. It also updates the Text property of the timeLabel control to show the quiz taker how many seconds remain.
- If no time remains, the timer stops and changes the timeLabel text to Time's up! A message box announces that the quiz is over, and the answers are revealed. The start button becomes available again.
Start the timer
To start the timer when the quiz starts, add three lines to the end of the StartTheQuiz() method, as the following sample shows.
When your quiz starts, this code sets the timeLeft variable to 30 and the Text property of the timeLabel control to 30 seconds. Then the Start() method of the Timer control starts the countdown.
Run your app
Save your program and run it.
Select Start the quiz. The timer starts to count down. When time runs out, the quiz ends, and the answers appear.
Start another quiz, and provide correct answers to the math problems. When you answer correctly within the time limit, a message box opens, the start button becomes available, and the timer stops.
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Предоставляет набор методов и свойств, которые можно использовать для точного измерения затраченного времени.
Примеры
В следующем примере показано, как использовать Stopwatch класс для определения времени выполнения приложения.
В следующем примере показано использование Stopwatch класса для вычисления данных о производительности.
Комментарии
Stopwatch Экземпляр может измерять затраченное время на один интервал или общее время, прошедшее через несколько интервалов. В типичном Stopwatch сценарии вы вызываете Start метод, а затем в конечном итоге вызываете Stop метод, а затем проверяете прошедшее время с помощью Elapsed свойства.
Stopwatch Экземпляр выполняется или останавливается; используется для IsRunning определения текущего состояния объектаStopwatch. Используется Start для начала измерения затраченного времени; используется Stop для остановки измерения затраченного времени. Запрос значения затраченного времени с помощью свойств ElapsedElapsedMillisecondsили ElapsedTicks. Вы можете запросить затраченные свойства времени во время выполнения или остановки экземпляра. Свойства затраченного времени постоянно увеличиваются во время Stopwatch выполнения; они остаются постоянными при остановке экземпляра.
По умолчанию затраченное значение времени экземпляра Stopwatch равно общему значению всех измеренных интервалов времени. Каждый вызов Start начинает подсчет в совокупное затраченное время; каждый вызов заканчивает Stop текущее измерение интервала и зависает совокупное значение затраченного времени. Reset Используйте метод для очистки совокупного затраченного времени в существующем Stopwatch экземпляре.
Меры Stopwatch , прошедшие время путем подсчета тактов таймера в базовом механизме таймера. Если установленное оборудование и операционная система поддерживают счетчик производительности с высоким разрешением, Stopwatch класс использует этот счетчик для измерения затраченного времени. В Stopwatch противном случае класс использует системный таймер для измерения затраченного времени. Frequency Используйте поля для IsHighResolution определения точности и разрешения Stopwatch реализации времени.
Класс Stopwatch помогает управлять счетчиками производительности, связанными с временем, в управляемом коде. В частности, Frequency поле и GetTimestamp метод можно использовать вместо неуправляемых Windows API QueryPerformanceFrequency и QueryPerformanceCounter .
На компьютере с несколькими обработчиками не имеет значения, на каком процессоре выполняется поток. Однако из-за ошибок в BIOS или аппаратном уровне абстракции (HAL) можно получить разные результаты времени на разных процессорах. Чтобы указать сходство процессора для потока, используйте ProcessThread.ProcessorAffinity метод.
Конструкторы
Инициализирует новый экземпляр класса Stopwatch.
Получает частоту таймера в виде количества тактов в секунду. Это поле доступно только для чтения.
Указывает, зависит ли таймер от счетчика производительности высокого разрешения. Это поле доступно только для чтения.
Свойства
Получает общее затраченное время, измеренное текущим экземпляром.
Получает общее затраченное время в миллисекундах, измеренное текущим экземпляром.
Получает общее затраченное время в тактах таймера, измеренное текущим экземпляром.
Получает значение, указывающее, запущен ли таймер Stopwatch.
Методы
Определяет, равен ли указанный объект текущему объекту.
Служит хэш-функцией по умолчанию.
Получает текущее число тактов временного механизма.
Возвращает объект Type для текущего экземпляра.
Создает неполную копию текущего объекта Object.
Останавливает измерение интервала времени и обнуляет затраченное время.
Останавливает измерение интервала времени, обнуляет затраченное время и начинает измерение затраченного времени.
Запускает или возобновляет измерение затраченного времени для интервала.
Инициализирует новый экземпляр Stopwatch, задает свойство затраченного времени равным нулю и запускает измерение затраченного времени.
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Предоставляет набор методов и свойств, которые можно использовать для точного измерения затраченного времени.
Примеры
В следующем примере показано, как использовать Stopwatch класс для определения времени выполнения приложения.
В следующем примере показано использование Stopwatch класса для вычисления данных о производительности.
Комментарии
Stopwatch Экземпляр может измерять затраченное время на один интервал или общее время, прошедшее через несколько интервалов. В типичном Stopwatch сценарии вы вызываете Start метод, а затем в конечном итоге вызываете Stop метод, а затем проверяете прошедшее время с помощью Elapsed свойства.
Stopwatch Экземпляр выполняется или останавливается; используется для IsRunning определения текущего состояния объектаStopwatch. Используется Start для начала измерения затраченного времени; используется Stop для остановки измерения затраченного времени. Запрос значения затраченного времени с помощью свойств ElapsedElapsedMillisecondsили ElapsedTicks. Вы можете запросить затраченные свойства времени во время выполнения или остановки экземпляра. Свойства затраченного времени постоянно увеличиваются во время Stopwatch выполнения; они остаются постоянными при остановке экземпляра.
По умолчанию затраченное значение времени экземпляра Stopwatch равно общему значению всех измеренных интервалов времени. Каждый вызов Start начинает подсчет в совокупное затраченное время; каждый вызов заканчивает Stop текущее измерение интервала и зависает совокупное значение затраченного времени. Reset Используйте метод для очистки совокупного затраченного времени в существующем Stopwatch экземпляре.
Меры Stopwatch , прошедшие время путем подсчета тактов таймера в базовом механизме таймера. Если установленное оборудование и операционная система поддерживают счетчик производительности с высоким разрешением, Stopwatch класс использует этот счетчик для измерения затраченного времени. В Stopwatch противном случае класс использует системный таймер для измерения затраченного времени. Frequency Используйте поля для IsHighResolution определения точности и разрешения Stopwatch реализации времени.
Класс Stopwatch помогает управлять счетчиками производительности, связанными с временем, в управляемом коде. В частности, Frequency поле и GetTimestamp метод можно использовать вместо неуправляемых Windows API QueryPerformanceFrequency и QueryPerformanceCounter .
На компьютере с несколькими обработчиками не имеет значения, на каком процессоре выполняется поток. Однако из-за ошибок в BIOS или аппаратном уровне абстракции (HAL) можно получить разные результаты времени на разных процессорах. Чтобы указать сходство процессора для потока, используйте ProcessThread.ProcessorAffinity метод.
Конструкторы
Инициализирует новый экземпляр класса Stopwatch.
Получает частоту таймера в виде количества тактов в секунду. Это поле доступно только для чтения.
Указывает, зависит ли таймер от счетчика производительности высокого разрешения. Это поле доступно только для чтения.
Свойства
Получает общее затраченное время, измеренное текущим экземпляром.
Получает общее затраченное время в миллисекундах, измеренное текущим экземпляром.
Получает общее затраченное время в тактах таймера, измеренное текущим экземпляром.
Получает значение, указывающее, запущен ли таймер Stopwatch.
Методы
Определяет, равен ли указанный объект текущему объекту.
Служит хэш-функцией по умолчанию.
Получает текущее число тактов временного механизма.
Возвращает объект Type для текущего экземпляра.
Создает неполную копию текущего объекта Object.
Останавливает измерение интервала времени и обнуляет затраченное время.
Останавливает измерение интервала времени, обнуляет затраченное время и начинает измерение затраченного времени.
Запускает или возобновляет измерение затраченного времени для интервала.
Инициализирует новый экземпляр Stopwatch, задает свойство затраченного времени равным нулю и запускает измерение затраченного времени.
Читайте также: