Как создать таймер в c
Перейти к содержимому

Как создать таймер в c

  • автор:

Как создать таймер в c

Доброго времени суток! В этой статье я расскажу об использовании таймера в программах, написанных на C#, а в конце мы напишем простейшую программу часы. Статья будет практического характера и для её понимания Вам нужно владеть начальными знаниями программирования на языке C# и работы с WindowsForms приложениями. Но сначала, я расскажу для чего же нужны таймеры в программах. Чаще всего, таймеры используют для периодического вызова определенного метода (подпрограммы). У компонента «Timer» есть специальное (и единственное событие) — «Tick». Вот обработчик этого события, далее обработчик таймера, и вызывается с заданной программистом периодичностью.

Как я уже сказал, рассказ о таймерах будет в контексте WindowsForms. Так что я предлагаю создать новый проект приложения с графическим интерфейсом (WindowsForms). После чего, на главную форму из панели инструментов перенести компонент «Timer». Расположение компонента «Timer» в панели инструментов показано на рисунке ниже.

Компонент Timer

Данный компонент не является видимым на форме, поэтому, в дизайнере форм Вы его не увидите, но он будет в неком контейнере по формой, как показано на рисунке ниже.

Компонент Timer в дизайнере (под формой)

Компонент Timer в дизайнере (под формой)

И если выбрать данный компонент в дизайнере форм, то можно увидеть его свойства, которых не так много — всего шесть. Я расскажу о самых важных, которые мы будем использовать. А сейчас, давайте посмотрим на свойства таймера (см. рисунок ниже).

Свойства компонента Timer

Свойства компонента Timer

  • Свойство «Name» задает название таймера (скорее даже его уникальное имя, так как на форме может быть не один такой компонент);
  • Свойство «Eneble» делает таймер доступным (если установлено в true) или наоборот — недоступным (если установлено в false);
  • Свойство «Interavl» задает интервал, через который будет периодически вызываться обработчик таймера.

Так же у компонента «Timer» есть два интересующих нас метода:

  • Start — запускает таймер (после вызова этого метода, будет периодически «срабатывать» обработчик таймера);
  • Stop — останавливает таймер (после вызова этого метода, обработчик таймера перестанет «срабатывать» ).

А вот и то самое событие «Tick»:

Событие (Tick) таймера

Событие (Tick) таймера

А теперь, давайте приступим к практике. Для наглядности, я решил написать программу часы. Конечно, полноценными часами эту программу назвать нельзя, но она будет показывать время. Причем, не всегда, а только когда мы запустим таймер, который будет «срабатывать» раз в секунду, и выводить текущее время в надпись на форме. Для запуска и остановки таймера будут использоваться две кнопки.

После того как я перенес все необходимые элементы на главную форму, она стала выглядеть так, как показано на рисунке ниже.

Главное окно программы

Главное окно программы

Как видите, программа максимально простая: две кнопки, да текстовая надпись. А теперь, давайте перейдем к коду. Я создал обработчики событий клика для каждой копки и события «Tick» таймера. Код приведен ниже:

//Обработчик нажатия на кнопку "Старт" private void StartBtn_Click(object sender, EventArgs e) < //Делаем таймер доступным MainTimer.Enabled = true; //Запускаем таймер MainTimer.Start(); >//Обработчик нажатия на кнопку "Стоп" private void StopBtn_Click(object sender, EventArgs e) < //Останавливаем таймер MainTimer.Stop(); //Снова делаем таймер недоступным MainTimer.Enabled = false; //"Сбрасываем" текст надписи в исходное состояние TimeLbl.Text = "Текущее время:"; >//Обработчик таймера (вызывается с заданной периодичностью) private void MainTimer_Tick(object sender, EventArgs e) < //Раз в секунду будет выводиться такой текст (с текущим временем) TimeLbl.Text = string.Format("Текущее время: ", DateTime.Now.ToString("HH:mm:ss")); >

Всё довольно просто! А вот так будет выглядеть запущенная программа после нажатия на кнопку «Старт».

Как работать с таймером в СИ?

как правильно пользоваться таймером в CИ ? К примеру мне нужно подождать без «засыпания» 100 мс для последующей «работы», но при этом выполнять иные «задачи» пока жду завершения «поставленного» времени. К примеру можно использовать sleep(3) НО он «уводит» процесс в «засыпание» и я не могу выполнять иные задачи во время «этого» промежутка времени. этот вопрос создал в связи с тем что, в книгах столкнулся с малым количеством примеров работы с таймером, (книги новые, Язык си в XXI веке и Язык С Справочник(стандарт С11) )

Отслеживать
задан 17 окт 2019 в 13:06
2,909 7 7 золотых знаков 44 44 серебряных знака 83 83 бронзовых знака

Если не хотите углубляться в многопоточность, то можно попробовать сделать через setitimer() или timer_settime() . Можно и через alarm() , но там точность — секунда.

17 окт 2019 в 14:40

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

мне нужно подождать 100 мс, но при этом выполнять иные задачи

Это называется «мультипрограммирование». Или, по другому «параллельное программирование» потому, что несколько «потоков управления» (программ, подпрограмм. ) выполняются параллельно.

Независимо от языка программирования и ОС, для оторой Вы пытаетесь написать программу, есть всего две методики организации мультипрограммирования:

  • Нити (треды — thread)
  • Процессы

В разных ОС эти подходы реализуются чуть-чуть по разному. Если говорить о Linux, то:

  • Нити реализуются с помощью библиотеки pthread (см. http://ccfit.nsu.ru/arom/data/PP_ICaG/03_pthreads_txt.pdf)
  • Потоки создаются системным вызовом fork() (см. man 2 fork)

В любом случае, параллельное программирование — тема очень сложная и ребует время для освоения. Подумайте — никак не обойтись?

Класс Timer в C#: все, что нужно знать новичку

Таймер — программный механизм, позволяющий через определенное время выполнять нужный нам участок кода, делая это заданное количество раз. Например, нам нужно запускать резервное копирование папки каждые 10 минут или делать запись в файл журнала каждую секунду. В языке программирования C# есть все необходимые средства, чтобы реализовать такую логику. Не будем ходить вокруг да около, а сразу рассмотрим принцип работы такого механизма на реальном примере.

Ефективний курс від robotdreams: Blockchain-розробник.
Революційні рішення в технологіях.

Содержание:

Ефективний курс від skvot: Основи 3D-моделювання в ZBrush.
Звільніть свою творчість.

Визуальный режим использования таймера в С# (timer wpf c#)

Присутствующий в Windows Forms управляющий элемент «Таймер» ( c# windows forms timer ) можно перетащить в форму и задать его свойства. Давайте создадим приложение Windows, использующее таймер для записи текста в текстовый файл каждые 5 секунд. В нашем приложении Windows Forms есть две кнопки: «Пуск» и «Стоп». Программа будет записывать строку в текстовый файл каждую секунду после первоначального нажатия кнопки «Пуск». Приложение прекратит временные циклы записи в текстовый файл при нажатии кнопки «Стоп».

Шаг 1

Откроем Visual Studio и создадим приложение Windows Forms.

Шаг 2

Добавим в форму два элемента управления Button и назовем их Start и Stop , хотя имена вы можете написать любые, по своему усмотрению. Окончательная форма выглядит следующим образом:

C# таймер

Шаг 3

Теперь давайте добавим в нашу программу элемент управления Timer . Перетащим его из Visual Studio Toolbox в форму. С помощью такой нехитрой манипуляции в нашей форме появится элемент – timer1 .

Шаг 4

Теперь нам необходимо установить свойства нашего таймера. Для этого щелкнем правой кнопкой мыши на элементе управления « Timer » и откроем окно «Свойства». Здесь для вкладки Interval необходимо установить значение 1000, которое определяется в миллисекундах.

1 секунда = 1000 миллисекунд.

C# таймер

Шаг 5

Теперь нужно нажать кнопку Events и добавить обработчик событий Timer , дважды щелкнув по свойству Tick . Событие таймера здесь — timer1_Tick (как показано на изображении ниже).

C# таймер

Шаг 6

Теперь добавим классы FileStream и StreamWriter в начало нашей программы. Они используются для создания нового текстового файла и реализации записи данных в него. Все классы определены в библиотеке базовых классов System.IO , поэтому обязательно импортируйте System.IO в начале программы.

Ефективний курс від skvot: Режисура відеороликів.
Творча магія кінематографу.

using System.IO; private static FileStream fs = new FileStream(@"c:\temp\mcb.txt", FileMode.OpenOrCreate, FileAccess.Write); private static StreamWriter m_streamWriter = new StreamWriter(fs);

Мы видим из предыдущего участка кода, что класс FileStream создает файл mcb.txt на диске C , а StreamWriter определен для записи в него данных. Теперь напишем алгоритм реализации записи нескольких строк в наш файл:

private void Form1_Load(object sender, System.EventArgs e) < // Write to the file using StreamWriter class m_streamWriter.BaseStream.Seek(0, SeekOrigin.End); m_streamWriter.Write(" File Write Operation Starts : "); m_streamWriter.WriteLine("", DateTime.Now.ToLongTimeString(),DateTime.Now.ToLongDateString()); m_streamWriter.WriteLine("===================================== \n"); m_streamWriter.Flush(); >

Далее настроим два обработчика регулирующих нажатие кнопок Start и Stop . В примере ниже, для кнопки «Пуск» устанавливаем значение свойства таймера Enabled = true . Теперь при нажатии на нее будет запускаться таймер, регулирующий выполнение события.

Ту же процедуру проделываем и с кнопкой STOP , только в этом случае свойству Enabled устанавливаем значение false для прекращения выполнения нашего события.

private void button1_Click ( object sender, System.EventArgs e) < timer1.Enabled = true ; >private void button2_Click ( object sender , System.EventArgs e)

Остался последний шаг — создать событие timer1_Tick , записывающее текущую дату в текстовый файл:

private void timer1_Tick ( object sender , System.EventArgs e) < m_streamWriter.WriteLine ( "" , DateTime.Now.ToLongTimeString (), DateTime.Now.ToLongDateString ()); m_streamWriter.Flush (); >

Шаг 7

Скомпилируем и запустим приложение. Затем нажмем кнопку «Пуск», чтобы начать запись в текстовый файл. Подождем примерно минуту, а затем нажмем кнопку «Стоп», чтобы остановить его работу. В выходном текстовом файле mcb.txt после всех манипуляций около 60 раз пропишется текущая дата и время. Это значит, что мы все сделали правильно.

Пример использования в C# класса Timer во время выполнения программы

Мы только что разобрали, как использовать таймер в начале разработки приложения с помощью визуального конструктора Visual Studio. Но иногда вам может потребоваться программно использовать таймер во время выполнения этого приложения.

Класс Timer в C# представляет функции отложенного запуска событий во время выполнения программы.

Например: создадим такой таймер, установим ему необходимые свойства, а также добавим обработчик событий, интервал сделаем равным 2 секундам:

Timer timer1 = new Timer < Interval = 2000 >; timer1.Enabled = true ; timer1.Tick + = new System.EventHandler (OnTimerEvent);

Допустим, мы хотим отобразить текст в элементе управления ListBox . Следующий код добавляет текст и обновляет ListBox каждые 2 секунды:

private void OnTimerEvent ( object sender , EventArgs e)

Класс Timer также можно использовать, если вы хотите вызывать событие через заданный промежуток времени:

Ефективний курс від laba: HR Business Partner.
Ставайте ключовим гравцем у розвитку бізнесу.

Timer timer1 = new Timer < Interval = 5000 >; timer1.Enabled = true; timer1.Tick += new System.EventHandler(OnTimerEvent);

Событие в предыдущем примере будет запускаться каждые 5 секунд.

Резюме

Мы рассмотрели основные моменты работы с функцией таймера в C#, а также разобрались, как создать приложение Windows с элементами управления Timer , чтобы использовать его для выполнения необходимого вам функционала. Мы разобрали как вариант визуального программирования через управляющие элементы, так и случай программного вызова таймера в произвольном участке кода.

Закрепить приведенный материал можно на базе таких видео:

Таймер в Си

Таймер должен через время положить файл на БД. [Таймер]
Мне нужен таймер, а я не знаю как его делать именно, чтоб в конкретное время он сохранял информацию.

Поясните за таймер!) Или таймер на формах наследниках
Доброго. В проге есть основная форма и в процессе работы создается 1-2-3-4-5 форм наследников все.

Таймер похожий на таймер в delphi
Добрый всем)В общем хочу создать класс таймера похожий на класс таймера на delphi.Суть в том,что я.

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *