Как сделать механизм точности create

Добавил пользователь Алексей Ф.
Обновлено: 05.10.2024

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

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

Машины опорных векторов работают, находя точки данных разных классов и рисуя границы между ними. Выбранные точки данных называются опорными векторами, а границы называются гиперплоскостями.

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

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

Один из способов обойти это - проецировать ваши данные в более высокие измерения, создавая дополнительные функции. Вместо двумерного пространства вы получаете от наличия особенностей а такжеб,Вы могли бы объединить их (например,ab, a², b²)и попытаться найти закономерности (или разделительную гиперплоскость) в этих измерениях.

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

SVM позволяют нам обойти это дополнительное обучение, используя трюк с ядром.

Возможно, вы слышали о ядре трюк. Это одна из тех вещей, которая включена в каждое обсуждение SVM, но часто это не объясняется так, как могло бы быть.

Ядро - это просто функция, которая принимает две точки данных в качестве входных данных и возвращает оценку сходства. Это сходство можно интерпретировать как показатель близости. Чем ближе точки данных, тем выше сходство.

Крутая вещь в функциях ядра заключается в том, что они могут дать нам оценки сходства из более высоких измерений без необходимости трансформации наших данных.

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

Таким образом, фокус ядра заключается в использовании функции ядра вместо дорогостоящего преобразования.

(Если вы математически настроены, вам может быть интересно, какие функции можно использовать в качестве ядра. Ответ заключается в том, что неявная функция, которая дает нам оценку сходства в более высоких измерениях, существует всякий раз, когдапространству внутреннего произведения может быть дана мера, которая является положительно определенной.)

Теперь, когда мы понимаем, как работают SVM и какова хитрость ядра, мы можем перейти к ноутбуку Jupyter и посмотреть, как наш выбор ядра влияет на наши модели.

Если вы используете Scikit-Learn, вы увидитедокументациячто вы можете выбрать из нескольких разных ядер при создании объекта классификатора векторов поддержки (SVC). Они включают:

Для наглядности оставим только первые две функции набора данных (длина Sepal и ширина Sepal). Мы можем построить их и использовать цвета, чтобы показать их класс (вид).


Теперь у нас есть визуальное понимание наших данных, и мы можем перейти к тому, как ядра SVM влияют на границы классов.

Линейные ядра вычисляют сходство во входном пространстве. Они неявно определяют трансформацию в более высокие измерения. Из-за этого каждая из гиперплоскостей на рисунке выше представляет собой прямые линии.

Возможно, вы видели графики SVM, на которых выглядит, как будто границы решения изогнуты (как те, которые появляются). Важно отметить, что границы решений изогнуты только в области ввода. В неявном пространстве пространственных объектов они представляют собой прямые линии или плоскости. (На самом деле, подобные графики не создаются с помощью уравнений для извилистых линий, они создаются путем классификации сетки крошечных точек и раскраски их в соответствии с выводом SVM, как вы можете видеть из функции create_grid_plot.)


Радиальная базисная функцияЯдро не просто помогает нам избежать некоторых дополнительных функций. Пространство объектов RBF имеет бесконечное количество измерений. Это означает, что мы можем использовать ядро ​​для построения очень сложных границ принятия решений. Чем больше измерений, тем больше шансов, что мы найдем гиперплоскость, которая аккуратно разделяет наши данные.

радиальная основаЧасть названия происходит от того факта, что эта функция уменьшается в цене, когда она удаляется от центра. (Центр в данном случае является опорным вектором.) Это объясняет, почему границы решений имеют форму колокольчика, когда мы их визуализируем

На самом деле мы уже встретили ядро ​​полинома. Линейные ядра являются частным случаем полиномиальных ядер, где степень = 1.

Ядро полинома позволяет нам изучать шаблоны в наших данных, как если бы у нас был доступ к функциям взаимодействия, которые являются результатом объединения ранее существующих функций (a², b², ab и т. Д.)

Если вам интересно, как выбирать между полиномом и RBF: RBF - ваш лучший выбор, если вы не работаете в НЛП, где квадратичные (степень = 2) полиномы имеют тенденцию работать хорошо.

До сих пор каждое ядро ​​работало достаточно хорошо, без дополнительной настройки параметров или изменения функций, но это все изменится. Давайте посмотрим на сигмовидное ядро.


Использование сигмовидного ядра позволило нашей модели предсказать один и тот же класс для каждой входной строки, что привело к показателю точности около 17%. Так что же случилось?

Мы говорили о том, что функции ядра - это всего лишь меры сходства. Если у вас возникли проблемы с моделью SVM, может быть полезно запустить ваши данные через ядро, чтобы увидеть, произойдет ли что-нибудь непредвиденное. Удобно, что каждое из ядер, доступных для классификатора векторов поддержки, включено в Scikit-Learn.попарные метрикимодуль. Это означает, что мы можем передать наши данные только ядру и посмотреть, что мы получим. Давайте попробуем это для сигмовидного ядра.

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

Если вы изучали глубокое обучение (или логистическую регрессию), вы узнаетесигмовидная функция, Служит активацией - вкл или выкл, ноль или единица. Вы также можете знать, что входные данные, которые не находятся между нулем и единицей, могут вызвать хаос. Давайте попробуем измерить наши особенности диафрагмы и посмотрим, какое влияние это окажет.


Успех. Наш показатель точности вернулся к более чем 75%.

Что делает параметр C в классификации SVM? Он сообщает алгоритму, насколько вы заботитесь о неправильно классифицированных баллах.

Как правило, SVM стремятся найти гиперплоскость с максимальным запасом. То есть линия, которая имеет как можно больше места с обеих сторон.

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

Подумайте об этом так: если вы увеличиваете параметр C, вы держите пари, что данные тренировок содержат максимально экстремальные наблюдения. Вы держите пари, что будущие наблюдения будут дальше от границ, чем точки, на которых вы обучали модель.

Давайте посмотрим, как изменение параметра C может повлиять на наши модели.



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

В сочетании с ядром RBF (или гауссовским) большие значения параметра C могут значительно превысить данные. Это вызвало отдельные области классификации на первом рисунке выше. Если мы бежимGridSearchCVпо параметру C мы находим, что идеальное значение для C равно 10:


Переоснащение и изолированные области исчезли, в результате чего мы получили показатель точности 83%, что на 1% больше, чем в нашей исходной модели ядра RBF.

Прежде чем перейти к другому параметру, вот как большие и малые значения параметра C влияют на ядро ​​сигмоида:



Вы можете видеть, что мы повысили показатель точности нашей (изначально) очень плохой сигмовидной модели примерно до той же точности, что и другие ядра, просто увеличив параметр C. И именно поэтому мы настраиваем параметры!

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


(Мы видим, что разные классы кажутся более отделимыми, чем при использовании предыдущих функций, но зеленый и серый виды по-прежнему пересекаются.)

Гамма-параметр имеет наиболее интуитивный смысл, когда мы думаем о ядре RBF (или гауссиане). Как я упоминал выше, границы классов Гаусса рассеиваются по мере удаления от опорных векторов. Гамма-параметр определяет, как быстро происходит это рассеяние; большие значения уменьшают эффект любого отдельного вектора поддержки.

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


Точность 99,3% - это не плохо, правда?

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

В качестве проверки здравомыслия, давайте сделаем 500 раундовслучайная выборкаи оценим стабильность нашей модели:

Глядя на эту гистограмму, мы видим, что не только точность 99,3%, которую мы достигли при использовании всех данных, никогда не встречается на небольших выборках, большинство оценок попадают в диапазон, аналогичный моделям без гамма-настройки, и многие из них значительно улучшаются. хуже.

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



Влияние опорных векторов еще больше возрастает с сильно уменьшенной гаммой, и взамен мы получаем результаты, которые в среднем намного лучше, чем у ненастроенных моделей. Более того, мы на самом деле получили несколько тестов в тесте точности 97,5–100%.

Давайте снова серьезно уменьшим гамма-параметр, на этот раз до 0,001, и посмотрим, что происходит с границами наших решений.



Оценка модели значительно упала, и области пространства признаков более четко классифицированы. С другой стороны, 500 итераций показывают, что производительность модели в среднем улучшается по сравнению с ненастроенными моделями (которые колебались около 80%).



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

Вы должны оценить, используя свой собственный опыт:

  • Будущие наблюдения могут быть сгруппированы вместе
  • Классы должны иметь большие поля между ними
  • Кажущиеся кривые в границах решения происходят из-за случайного шанса или ошибки измерения

Я надеюсь, что вы нашли это исследование параметров SVM полезным. Мы рассмотрели различные типы ядра, попарные функции, параметр штрафов и назначение гаммы. Все это должно помочь вам уточнить и настроить ваши будущие модели машин опорных векторов.

Механические часы — это сложное устройство с множеством мельчайших деталей. И, разумеется, иногда в них происходят поломки. Периодическое сервисное обслуживание, принятое у нас называть репассажем, тоже никто не отменял. Разумеется, по всем вопросам можно обратиться в часовую мастерскую, но в этой статье мы разберем ситуации с часами, которые достаточно легко решаются самостоятельно, без визита к часовщику. Конечно, сделать репассаж без предварительного обучения – задача довольно затруднительная, и тем более сложный ремонт, хотя никто не запрещает попробовать: в интернете имеется масса видеороликов и пошаговых инструкций по сборке-разборке практически всех популярных механизмов.

Предположим, вы купили новые часы и их точность оказалась +20 секунд в сутки. Это весьма посредственный результат – любая механика способна работать лучше. Тем не менее, поскольку калибр укладывается в пределы своей паспортной среднесуточной погрешности, составляющей, например, -10/+30 секунд, то предъявить претензии ни к продавцу, ни к производителю не получится. В данном случае пригодится таймграфер – специальный прибор, с помощью которого можно не только проверять и настраивать точность хода, но и оценивать техническое состояние механизма, определять неисправности и необходимость репассажа.

таймграфер WeiShi Multifunction Timegrapher 1000

Для домашнего использования достаточно приобрести недорогой прибор китайского производства WeiShi Multifunction Timegrapher 1000 по цене около $140 на Ибэй или АлиЭкспресс (как альтернативный вариант – швейцарский портативный таймграфер ONEOF Accuracy², обзор которого мы публиковали здесь).

Вкратце опишем работу этого устройства, состоящего из основного блока с ЖК-дисплеем 11 см по диагонали, 6-позиционного микрофона и блока питания.

таймграфер WeiShi Multifunction Timegrapher 1000

После размещения тестируемых часов (предварительно их нужно завести минимум на 20 оборотов головки) на приборный столик микрофона и включения прибора происходит автоматическое определение частоты механизма, после чего следует вызвать окошко с настройками и указать параметр Lift Angle. Это угол подъема баланса (боковой ход), который проходит балансовое колесо с момента удара эллипса баланса об рожок анкерной вилки до момента, когда анкерная вилка перейдет в следующее положение и ляжет на ограничительный штифт. Найти значение этого угла для каждого конкретного калибра можно в интернете. Например, для механизма Miyota 9015 угол подъема баланса равен 51°, Miyota 8215 — 49°, Sellita SW200 — 50°, ETA Valjoux 7750 — 49°.

таймграфер WeiShi Multifunction Timegrapher 1000

После установки начальных параметров запускаем проверку механизма. На экране появится диаграмма хода, иногда ее называют выкачкой хода. Эта диаграмма рассчитывается на основе сравнения двух последовательных шумов – освобождения баланса с эталонным значением, вырабатываемым кварцевым генератором прибора. С помощью диаграммы определяются не только отклонения в точности и ошибка хода, но и другие недостатки, такие как неисправности в анкерном спуске, потеря энергии из-за высохшего масла в колесной системе, износ колес и так далее.

На рисунке показаны различные варианты диаграммы и советы по устранению неисправностей.

различные варианты диаграммы хода и советы по устранению неисправностей

Кроме диаграммы, таймграфер выводит на экран числовые значения точности в секундах в сутки, амплитуду баланса в градусах и ошибку хода (выкачку) в миллисекундах.

инструмент для снятия задней крышки часов

Как вы помните, нам нужно отрегулировать точность часов. Для этого открываем заднюю крышку (лучше использовать специальные приспособления, а не подручные средства вроде штангенциркуля или ножниц).

Таким образом, мы разобрались, как оценить общее состояние механизма с помощью таймграфера и настроили точность хода.

В заключение хочу сказать, что каждому любителю часов также необходимо иметь собственное размагничивающее устройство. Размагничивание — это первое, что нужно сделать, если часы начали сильно спешить, и лишь потом, если проблема не исчезла, предпринимать что-либо еще.

Из этого руководства вы узнаете, как использовать Amazon SageMaker для создания, обучения и развертывания модели машинного обучения. Для этого упражнения мы воспользуемся популярным алгоритмом машинного обучения XGBoost. Amazon SageMaker – это полностью управляемый модульный сервис машинного обучения, который помогает разработчикам и специалистам по работе с данными создавать, обучать и развертывать модели машинного обучения в любом масштабе.

Процесс создания моделей машинного обучения от составления концепции до внедрения в рабочую среду обычно сложен и занимает много времени. Необходимо управлять большими объемами данных для обучения модели, выбрать оптимальный алгоритм, контролировать вычислительные ресурсы во время обучения, а затем развернуть модель в рабочей среде. Amazon SageMaker снижает сложность, значительно упрощая создание и развертывание моделей машинного обучения. После выбора подходящих алгоритмов и платформ из широкого ассортимента этот сервис управляет всей базовой инфраструктурой, чтобы обучить модель с помощью нескольких петабайтов данных и развернуть ее в рабочей среде.

В этом примере вы берете на себя обязанности разработчика решений машинного обучения, который работает на банк. Вам была поручена разработка модели машинного обучения, которая прогнозирует, будет ли клиент регистрироваться для получения депозитного сертификата (CD). Модель будет обучена по набору маркетинговых данных, содержащему демографическую информацию о клиентах, отзывы о маркетинговых мероприятиях и сведения о внешних факторах.

В этом руководстве рассматриваются следующие темы:

  1. Создание инстанса блокнота
  2. Подготовка данных
  3. Настройка модели для обучения на данных
  4. Развертывание модели
  5. Оценка производительности модели машинного обучения

Ресурсы, создаваемые и используемые в этом руководстве, поддерживаются на уровне бесплатного пользования AWS. Не забудьте выполнить действия с шага 7 и удалить ресурсы. Если ваш аккаунт активно использовал эти ресурсы дольше двух месяцев, с него будет взята плата на сумму менее 0,50 USD.

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

Тип времени

1.1 time_t

На самом деле, длинное целое число, представляет время UTC (0: 0AM 0:05 1 января 1970 года, время эпохи системы Linux) к текущей системе вторичной разницы во времени, обычно используется для временных функций:

Используя функцию Ctime (), мы можем преобразовать функцию времени добраться до времени и даты нашего привычного использования и вернуть его в строку.

Кроме того, если вы хотите сравнить разницу времени между двумя раз, вы можете использовать функцию Difftime ():

1.2 struct tm

Структура TM называется взорванным временем в стандарте ANSI. Из определения следующего мы также можем увидеть, что время разлагается в очень подробную область.

Функции Gmtime () и LoceTime () могут преобразовать форматы данных Time_T в форматы TM. Разница состоит в том, что результатом преобразования GMTime () - это информация, соответствующая GMT (центральному часовым поясам), и результатом преобразования локального () функции - это информация о текущем часовом поясе.

Функция функции MKTime () точно противоположная, и она преобразует структуру TM в Time_T тип времени.

Функция ASCTIME () представляет собой время и дату представления структуры TM в наше привычное использование и возвращается в строку.

1.3 struct timeval

Структура Timeval может получить время точности уровня MS, которая определяется следующим образом:

Функция, используемая структурой Timeval: GetTimeOfDay () и SettimeOfDay ():

1.4 struct timespec

Структура TimeSpec может обеспечить более высокие значения времени прецизионного времени, а уровень NS определяется следующим образом:

Соответствующая функция: clock_getime ():

Если CLK_ID используется для разработки соответствующего типа часов, могут использоваться разные типы для получения различных значений времени, с четырьмя видами:

  • CLOCK_REALTIME: Система - это в режиме реального времени, начиная с UTC, если время изменяется соответственно пользовательскими изменениями;
  • CLOCK_MONOTONIC:Когда система запускает запуск, даже если пользователь меняет время;
  • CLOCK_PROCESS_CPUTIME_ID:Этот процесс начинает выполнять время в текущую программу систем процессора;
  • CLOCK_THREAD_CPUTIME_ID:Этот рычаг начинается со временем выполнения в текущей программной системе CPU.

2. Преобразование типа времени

2.1 Время преобразования типа

Введенные соответствующие функции времени и соответствующие функции обработки, давайте сделаем простой сводку различных типов времени, как показано ниже:


Большинство функций на рисунке были описаны в разделе 1, где две функции используются в структурных типах TM и пользователь, определенные в типе структуры TM и определенным пользователем. Convert между форматом отображения.

Функция STRFTIME () преобразует формат TM в формат формата и поместите его в главный адрес, а формат общего формата:

  • Микро-неделя
  • % Полное имя
  • Микрофин
  • % B полное имя
  • Строка времени даты% C Standard
  • Опубликовать два числа в% c
  • Первый день ежемесячного указа
  • % D месяц / день / год
  • % e в двух символьном домене, первый день ежемесячного представления
  • % F лет - месяц - день
  • Следующие два числа% г старых, используйте недельный год
  • % G старше, используйте недельный год
  • % h Короткопичное имя месяца
  • % H 24 часа часа
  • % I 12 часов часов
  • % J разумно выразил первые несколько дней
  • Месяц, указанный% m dec
  • Минимальное количество минут, обозначенных% м
  • % N новый символ линии
  • % P Местный AM или PM эквивалентно отобразить
  • % R 12 часов времени
  • % R показывает часы и минуты: HH: мм
  • % S Десятичное количество секунд
  • % T горизонтальная вкладка
  • % T отображение времени STATH: HH: MM: SS
  • % U Еженедельный день, в понедельник первый день (стоимость от 0 до 6, понедельник 0)
  • % U, Годилой неделя, поставить воскресенье в качестве первого дня (стоимость от 0 до 53)
  • Процент недели, используя ежедневный год
  • Выполнение% WECIMAL (значение от 0 до 6, воскресенье 0)
  • Неделя% W, в понедельник в качестве первого дня (стоимость от 0 до 53)
  • % X Стандартная строка даты
  • % X Стандартная строка времени
  • % Y не займет десять лет (стоимость от 0 до 99)
  • % Y принимает десятичный год века
  • % Z,% Z Название часового пояса, если имя часового пояса не может быть получено, верните пустые символы.
  • %% процентов знака

Функция STRPTIME () выполняет противоположную работу, преобразуйте функцию Rentime () обратно в формат структуры TM. Это определяется следующим образом:

2.2 Пример

После того, как рассказываю это, давайте пройдем простой пример:


3. Задержка функции и функции таймера

3.1 Функция сна

В пространстве пользователя Linux мы можем использовать семейство функции Sleep, чтобы добиться отложенных функций, следующие три функции сна обеспечивают три прецизионные задержки:

3.2 Функция задержки

В слое ядра Linux мы можем использовать семейство функции задержки для достижения различных функций времени точности:

3.3 Таймер Функция

Функции таймера, доступные в системе Linux, имеют много, такие как тревоги, выберите и многое другое. Этот раздел введет высокоточный таймер, который поставляется из стандарта POSIX. Так же, как нить, описанная выше, различные механизмы синхронизации, которые также имеют набор таких функций, как создание, удаление, съемку, настройка, все из которых включены в файл Time.h.

Создать таймер

Успешно создаваемые возвраты 0 не удалось вернуть -1 и обновить код ошибки. TimerId - это идентификатор таймера, который создает успех, а два других параметра являются относительно сложными:

(1). clockid_t: Используемые типы таймеров, в основном включают в себя:

  • CLOCK_REALTIME: Время спасено, например, 10 точка 10 Отдел, мы встали 10min Таймер, 5min После этого мы изменим системное время в 10 точка 10 Дивизион, таймер также пройдет 10min Когда. (Предположим, мы меняем время в это время 10 точка 25 Какое поведение ветвь? Несомненно
  • CLOCK_MONOTONIC: Таймер строго основан на установленном времени, не может быть изменен, изменяя время;
  • CLOCK_PROCESS_CPUTIME_ID: Таймер записывает только фактические затраты на фактические затраты; например, можно получить только 50% времени процессора, чтобы сделать процесс по-настоящему пройти через 10 минут, до 10:30 таймера истекает.
  • CLOCK_THREAD_CPUTIME_ID: С потоками для синхронизанных объектов нить в текущем процессе действительно проходит в течение определенного периода времени. Timer 。

(2). Sigevent : Если параметр EVP NULL, таймер истекает, генерирует сигнал по умолчанию, такой как Clock_realTimer, сигнал по умолчанию - SigalRM, а значение выглядит следующим образом:

среди них sigev_notify Говорят, что есть несколько способов:

  • SIGEV_NONE: Не производить уведомление, когда истек;
  • Sigev_signal: процесс будет доставлен в процесс для сигнала sigev_signo, чтобы указать, какой сигнал используется;
  • SIGEV_THREAD:Новая тема будет инициирована, когда истекает таймер; в этом случае требуется sigev_notify_function. Когда истекает таймер, нить будет запущена с использованием этой функции в качестве впуска для обработки сигнала; SIGEV_VALUE сохраняет параметры входящего SIGEV_NOTIFY_FUCT. Sigev_notify_attributes Если это не пусто, это должно быть указателем на pthread_attr_t для установки свойств потока (например, размер стека, отсоединение статуса и т. Д.);
  • SIGEV_THREAD_ID:Сигнал отправляется на указанную нить, обычно в сочетании с SIGEV_Signal, поэтому, когда истекает таймер, система отправляет сигнал на поток, указанную в SIGEV_NOTIFY_THREAD_ID, в противном случае любой поток в процессе может получить сигнал.

2. Начать таймер

Для new_value it_value используется для указания времени истечения срока действия текущего таймера. Когда таймер истекает, значение iT_Value будет обновляться в значение iT_Interval. Если значение iT_Interval равно 0, таймер не является планировщиком пространства временного пространства, и после истечения истечения IT_Value, он вернется к состоянию SCASTAPT.

Иногда приложение запускает таймер с интервалом времени, затем измените интервал времени таймера, который может быть реализован путем изменения new_value; если приложение хочет понять интервал времени перед изменением набора временных интервалов, его передается NONULL OLL_VALUE POINTER, поэтому, когда return returs time_settime () red_value сохраняет последнюю настройку интервала времени таймера. В большинстве случаев нам это не нужно, вы можете просто установить Old_Value на NULL, игнорируйте его.

Флаги только 2: 0 и Timer_abStime. Когда флаги 0, new_value-> it_value означает, что время времени, когда таймер сначала истек (например, я надеюсь, что время 2 секунды через 2 секунды); когда флаги Timer_abStime, new_value-> it_value означает первое завершение абсолютного времени ( Например, когда таймер истекает в 01:23:45); если new_value-> it_value установите абсолютное время, чем текущее абсолютное время, то таймер истекает немедленно; если часы clock_realtime отрегулируются, первое время таймера скорректирован соответствующим образом.

3. Получите оставшееся время таймера

4. Количество превышающих ограничений для получения таймеров

Возможно, что таймер истекает, и сигнал, генерируемый в последнее время таймера, все еще находится в приостановленном состоянии. В этом случае один из сигналов может быть потерян. Это ограниченный по времени таймера. Программа может определить это переполнение количества исключений, вызывая Timer_GetoverRun. Оверксирующий таймер может происходить только на сигнале, генерируемом тем же таймером. Несколькими таймерами, даже те таймеры, которые используют те же часы и сигналы, сгенерированные сигналы будут очереде, не потерявшись.

6. Удалить таймер

3.4 Пример

Давайте посмотрим на примере использования таймера:

Как видно из прогона, начальный таймер - 4S истечение срока действия, а последнее срок действия 3S:


Примечание:

Написано в WEN: эта статья является основной запиской, договоренностью главы и содержание AUPUE. Есть упущения или неправильные места в тексте, пожалуйста, также просветите меня.

Читайте также: