From 1b0d6eacaf80ab350c5f2a3c4942a411bcc11dd3 Mon Sep 17 00:00:00 2001 From: Boris Goncharov Date: Fri, 14 Dec 2018 21:22:50 -0500 Subject: [PATCH 01/13] Create RU.md --- docs/guide/cpp-time/RU.md | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 docs/guide/cpp-time/RU.md diff --git a/docs/guide/cpp-time/RU.md b/docs/guide/cpp-time/RU.md new file mode 100644 index 00000000..4c163441 --- /dev/null +++ b/docs/guide/cpp-time/RU.md @@ -0,0 +1,11 @@ +# Работа со временем в C++ + +Многие ноды мгновенно реагируют на получаемые изменения, но некоторые из них управляют процессами, продолжающимися в течение длительного времени. После определнной задержки они пересматривают себя, чтобы повторить задачу или завершить свою работу. + +[API ноды XOD C++](https://github.com/bgoncharov/xod-docs/blob/master/docs/reference/node-cpp-api) предоставляет функции планирования для решения этих задач. В этой статье мы изучим их на примере. + +# Задача + +Мы собираемся реализовать `tick` ноду, которая при срабатывании с помощью кнопки `SET` начинает посылать импульсы через равные промежутки времени `T`. Пользователь должен иметь возможность отменить выполняемую серию, отправив сигнал на вход `RST`. + +Хотя вы могли бы тривиально выразить такой узел комбинацией `flip-flop` и `clock`, вообще не испольщуя C++, давайте пока обойдемся без это. From 056d8bdf649b9d863865178c6fccc98dbb37ce6a Mon Sep 17 00:00:00 2001 From: Boris Goncharov Date: Sat, 15 Dec 2018 18:26:36 -0500 Subject: [PATCH 02/13] fitrst commit --- docs/guide/cpp-time/RU.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/guide/cpp-time/RU.md b/docs/guide/cpp-time/RU.md index 4c163441..6bbe1990 100644 --- a/docs/guide/cpp-time/RU.md +++ b/docs/guide/cpp-time/RU.md @@ -8,4 +8,4 @@ Мы собираемся реализовать `tick` ноду, которая при срабатывании с помощью кнопки `SET` начинает посылать импульсы через равные промежутки времени `T`. Пользователь должен иметь возможность отменить выполняемую серию, отправив сигнал на вход `RST`. -Хотя вы могли бы тривиально выразить такой узел комбинацией `flip-flop` и `clock`, вообще не испольщуя C++, давайте пока обойдемся без это. +Хотя вы могли бы тривиально выразить такой узел комбинацией `[flip-flop](https://github.com/bgoncharov/xod-docs/blob/master/libs/xod/core/flip-flop)` и `clock`, вообще не испольщуя C++, давайте пока обойдемся без это. From 5542de659151f16787faf90b2f2fcdd1bd5b452f Mon Sep 17 00:00:00 2001 From: Boris Goncharov Date: Sat, 15 Dec 2018 18:35:19 -0500 Subject: [PATCH 03/13] continue RU.md for cpp-time --- docs/guide/cpp-time/RU.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/docs/guide/cpp-time/RU.md b/docs/guide/cpp-time/RU.md index 6bbe1990..a541237e 100644 --- a/docs/guide/cpp-time/RU.md +++ b/docs/guide/cpp-time/RU.md @@ -8,4 +8,10 @@ Мы собираемся реализовать `tick` ноду, которая при срабатывании с помощью кнопки `SET` начинает посылать импульсы через равные промежутки времени `T`. Пользователь должен иметь возможность отменить выполняемую серию, отправив сигнал на вход `RST`. -Хотя вы могли бы тривиально выразить такой узел комбинацией `[flip-flop](https://github.com/bgoncharov/xod-docs/blob/master/libs/xod/core/flip-flop)` и `clock`, вообще не испольщуя C++, давайте пока обойдемся без это. +Хотя вы могли бы тривиально выразить такой узел комбинацией `flip-flop` и `clock`, вообще не испольщуя C++, давайте пока обойдемся без это. + +# Подготовка ноды + +Как и обычно, когда вы создаете ноду C++, начните с нового патча, добавьте необходимые терминалы и `not-implemented-in-xod`. + +![not-implemented-in-xod](https://github.com/bgoncharov/xod-docs/blob/master/docs/guide/cpp-time/outline.patch.png) \ No newline at end of file From bb7efcb148812c4c097f40b87a2210ab60d9f0a2 Mon Sep 17 00:00:00 2001 From: Boris Goncharov Date: Sat, 15 Dec 2018 18:49:45 -0500 Subject: [PATCH 04/13] RU.md --- docs/guide/cpp-time/RU.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/guide/cpp-time/RU.md b/docs/guide/cpp-time/RU.md index a541237e..3118f2ab 100644 --- a/docs/guide/cpp-time/RU.md +++ b/docs/guide/cpp-time/RU.md @@ -12,6 +12,6 @@ # Подготовка ноды -Как и обычно, когда вы создаете ноду C++, начните с нового патча, добавьте необходимые терминалы и `not-implemented-in-xod`. +Как и обычно, когда вы [создаете ноду C++](https://github.com/bgoncharov/xod-docs/blob/master/docs/guide/nodes-for-xod-in-cpp), начните с нового патча, добавьте необходимые терминалы и `not-implemented-in-xod`. ![not-implemented-in-xod](https://github.com/bgoncharov/xod-docs/blob/master/docs/guide/cpp-time/outline.patch.png) \ No newline at end of file From d16be94f3dc1b83cb6a81857af476d276c9398de Mon Sep 17 00:00:00 2001 From: Boris Goncharov Date: Sat, 15 Dec 2018 18:50:29 -0500 Subject: [PATCH 05/13] RU.md --- docs/guide/cpp-time/RU.md | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/docs/guide/cpp-time/RU.md b/docs/guide/cpp-time/RU.md index 3118f2ab..74659970 100644 --- a/docs/guide/cpp-time/RU.md +++ b/docs/guide/cpp-time/RU.md @@ -14,4 +14,31 @@ Как и обычно, когда вы [создаете ноду C++](https://github.com/bgoncharov/xod-docs/blob/master/docs/guide/nodes-for-xod-in-cpp), начните с нового патча, добавьте необходимые терминалы и `not-implemented-in-xod`. -![not-implemented-in-xod](https://github.com/bgoncharov/xod-docs/blob/master/docs/guide/cpp-time/outline.patch.png) \ No newline at end of file +![not-implemented-in-xod](https://github.com/bgoncharov/xod-docs/blob/master/docs/guide/cpp-time/outline.patch.png) + +Не забудьте указать подходящее значение по умолчанию для `T`. 1 секунда - отлично. + +Дважды щелкните `not-implemented-in-xod`, чтобы открыть редактор кода. + +# Установка таймаута + +Сначала мы должны обработать сигналы на входе SET. После этого мы бвоспуользуемся функцией setTimeout, чтобы запросить XOD снова вызвать `evaluate` после заданного нами времени ожидания: + +``` +struct State { }; + +\{{ GENERATED_CODE }} + +void evaluate(Context ctx) { + if (isInputDirty(ctx)) { + // Get T-input value. Conventionally it should be expressed in seconds + Number t = getValue(ctx); + + // However, XOD API works with millisecond values, so convert + TimeMs milliseconds = t * 1000; + + // Schedule re-evaluation after calculated number of milliseconds + setTimeout(ctx, milliseconds); + } +} +``` \ No newline at end of file From 8c18cc3f74a51cea9c6d18895410e344dfc76191 Mon Sep 17 00:00:00 2001 From: Boris Goncharov Date: Sat, 15 Dec 2018 18:51:13 -0500 Subject: [PATCH 06/13] RU.md c++ --- docs/guide/cpp-time/RU.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/guide/cpp-time/RU.md b/docs/guide/cpp-time/RU.md index 74659970..97605ccb 100644 --- a/docs/guide/cpp-time/RU.md +++ b/docs/guide/cpp-time/RU.md @@ -24,7 +24,7 @@ Сначала мы должны обработать сигналы на входе SET. После этого мы бвоспуользуемся функцией setTimeout, чтобы запросить XOD снова вызвать `evaluate` после заданного нами времени ожидания: -``` +```c++ struct State { }; \{{ GENERATED_CODE }} From 1ab3ceb6ba213dbd740c8968d04543642f36f85e Mon Sep 17 00:00:00 2001 From: Boris Goncharov Date: Sat, 15 Dec 2018 19:00:09 -0500 Subject: [PATCH 07/13] RU.md c++ --- docs/guide/cpp-time/RU.md | 42 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/docs/guide/cpp-time/RU.md b/docs/guide/cpp-time/RU.md index 97605ccb..d08fae2e 100644 --- a/docs/guide/cpp-time/RU.md +++ b/docs/guide/cpp-time/RU.md @@ -41,4 +41,44 @@ void evaluate(Context ctx) { setTimeout(ctx, milliseconds); } } -``` \ No newline at end of file +``` + +# Управление таймаутами + +Отлично. Мы сделали расписание. Теперь нужно сделать действие. Для этого используйте функцию [isTimedOut](https://github.com/bgoncharov/xod-docs/blob/master/docs/reference/node-cpp-api/#isTimedOut). Нам нужна явная проверка того, является ли текущая эвалюация вызванной таймаутом, поскольку причины для `evaluate` вызовов могут быть разные. Это можгут быть обновленные входные значения до истечения временного интервала. + +```c++ +struct State { }; + +\{{ GENERATED_CODE }} + +// Note, we extracted a function to read `T` input and set timeout +// with that value. The function helps us to avoid code duplication +// in `evaluate` since we need the code twice. +void charge(Context ctx) { + Number t = getValue(ctx); + TimeMs milliseconds = t * 1000; + setTimeout(ctx, milliseconds); +} + +void evaluate(Context ctx) { + if (isInputDirty(ctx)) { + charge(ctx); + } + + if (isTimedOut(ctx)) { + // Timeout has been elapsed, emit an output pulse + emitValue(ctx, true); + // To be re-evaluated next time we need to set timeout again + charge(ctx); + } +} +``` + +# Отмена таймаута + +Единственное, что нам осталось сделать - сбросить настройки. Когда сигнал посылается в `RST`, мы используем функцию [`clearTimeout`](https://github.com/bgoncharov/xod-docs/blob/master/docs/reference/node-cpp-api/#clearTimeout), чтобы остановить счет. + + + + From d5267f680884ae8188e8d6605d17f317c9197aa9 Mon Sep 17 00:00:00 2001 From: Boris Goncharov Date: Sat, 15 Dec 2018 19:45:11 -0500 Subject: [PATCH 08/13] Prettify --- docs/guide/cpp-time/RU.md | 48 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 46 insertions(+), 2 deletions(-) diff --git a/docs/guide/cpp-time/RU.md b/docs/guide/cpp-time/RU.md index d08fae2e..a4abae9e 100644 --- a/docs/guide/cpp-time/RU.md +++ b/docs/guide/cpp-time/RU.md @@ -14,7 +14,7 @@ Как и обычно, когда вы [создаете ноду C++](https://github.com/bgoncharov/xod-docs/blob/master/docs/guide/nodes-for-xod-in-cpp), начните с нового патча, добавьте необходимые терминалы и `not-implemented-in-xod`. -![not-implemented-in-xod](https://github.com/bgoncharov/xod-docs/blob/master/docs/guide/cpp-time/outline.patch.png) +![`not-implemented-in-xod`](https://github.com/bgoncharov/xod-docs/blob/master/docs/guide/cpp-time/outline.patch.png) Не забудьте указать подходящее значение по умолчанию для `T`. 1 секунда - отлично. @@ -45,7 +45,7 @@ void evaluate(Context ctx) { # Управление таймаутами -Отлично. Мы сделали расписание. Теперь нужно сделать действие. Для этого используйте функцию [isTimedOut](https://github.com/bgoncharov/xod-docs/blob/master/docs/reference/node-cpp-api/#isTimedOut). Нам нужна явная проверка того, является ли текущая эвалюация вызванной таймаутом, поскольку причины для `evaluate` вызовов могут быть разные. Это можгут быть обновленные входные значения до истечения временного интервала. +Отлично. Мы сделали расписание. Теперь нужно сделать действие. Для этого используйте функцию [`isTimedOut`](https://github.com/bgoncharov/xod-docs/blob/master/docs/reference/node-cpp-api/#isTimedOut). Нам нужна явная проверка того, является ли текущая эвалюация вызванной таймаутом, поскольку причины для `evaluate` вызовов могут быть разные. Это можгут быть обновленные входные значения до истечения временного интервала. ```c++ struct State { }; @@ -79,6 +79,50 @@ void evaluate(Context ctx) { Единственное, что нам осталось сделать - сбросить настройки. Когда сигнал посылается в `RST`, мы используем функцию [`clearTimeout`](https://github.com/bgoncharov/xod-docs/blob/master/docs/reference/node-cpp-api/#clearTimeout), чтобы остановить счет. +```c++ +struct State { }; + +\{{ GENERATED_CODE }} + +void charge(Context ctx) { + Number t = getValue(ctx); + TimeMs milliseconds = t * 1000; + setTimeout(ctx, milliseconds); +} + +void evaluate(Context ctx) { + if (isInputDirty(ctx)) { + // When pulsed on `RST` we cancel the timeout countdown regardless + // whether it was set or not + clearTimeout(ctx); + // Return from `evaluate` early giving priority to `RST` so that + // pulse on `SET` and timeout will not be even checked at this + // evaluation pass + return; + } + + if (isInputDirty(ctx)) { + charge(ctx); + } + + if (isTimedOut(ctx)) { + emitValue(ctx, true); + charge(ctx); + } +} +``` + +# Тест + +Вот и все. Наша нода готова. Проверьте это двумя кнопками, подключенными к `SET` и `RST` и триггером со светодиодом на другой стороне + +![Test](https://github.com/bgoncharov/xod-docs/blob/master/docs/guide/cpp-time/test.patch.png) +# Заключение +XOD предоставляет довольно простой API для управления временем. Хоть это и просто, вы получаете все инструменты, необходимые для управления длительными процессами. Основные принципы: +* Используйте `setTimeout`, чтобы запланировать повторную эвалюацию. Помните, что таймауты задаются в миллисекундах. +* Всегда используйте `isTimedOut`, чтобы убедиться, что вы оцениваете, потому что прошло время. +* Если вы хотите периодически запускать задачу, то вызывайте `setTimeout` повторно вручную когда `isTimedOut`. +* Используйте `clearTimeout`, чтобы убедиться, что отсчет таймера запущен. From 7704c92cc84770bfaab2c1772e6960639f51f001 Mon Sep 17 00:00:00 2001 From: Boris Goncharov Date: Sat, 15 Dec 2018 20:12:41 -0500 Subject: [PATCH 09/13] Prettify --- docs/guide/cpp-time/RU.md | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/docs/guide/cpp-time/RU.md b/docs/guide/cpp-time/RU.md index a4abae9e..2e02e415 100644 --- a/docs/guide/cpp-time/RU.md +++ b/docs/guide/cpp-time/RU.md @@ -1,28 +1,28 @@ # Работа со временем в C++ -Многие ноды мгновенно реагируют на получаемые изменения, но некоторые из них управляют процессами, продолжающимися в течение длительного времени. После определнной задержки они пересматривают себя, чтобы повторить задачу или завершить свою работу. +Большинство нод моментально реагируют на получаемые изменения, но некоторые из них управляют процессами, продолжающимися в течение длительного времени. После определнной задержки они переопределяют себя, чтобы повторить задачу или завершить свою работу. -[API ноды XOD C++](https://github.com/bgoncharov/xod-docs/blob/master/docs/reference/node-cpp-api) предоставляет функции планирования для решения этих задач. В этой статье мы изучим их на примере. +[API ноды XOD C++](https://github.com/bgoncharov/xod-docs/blob/master/docs/reference/node-cpp-api) предоставляет функции планирования для решения таких задач. В этой статье мы рассмотрим их на примере. # Задача -Мы собираемся реализовать `tick` ноду, которая при срабатывании с помощью кнопки `SET` начинает посылать импульсы через равные промежутки времени `T`. Пользователь должен иметь возможность отменить выполняемую серию, отправив сигнал на вход `RST`. +Мы собираемся реализовать ноду `tick`, которая при нажатии кнопки `SET` начинает посылать сигналы через равные промежутки времени `T`. Пользователь должен иметь возможность отменить выполняемую операцию, отправив сигнал на вход `RST`. -Хотя вы могли бы тривиально выразить такой узел комбинацией `flip-flop` и `clock`, вообще не испольщуя C++, давайте пока обойдемся без это. +На самом деле вы могли бы просто организовать такую ноду скомбенировав `flip-flop` и `clock`, без испольщования C++, но сейчас мы это проигнорируем. # Подготовка ноды -Как и обычно, когда вы [создаете ноду C++](https://github.com/bgoncharov/xod-docs/blob/master/docs/guide/nodes-for-xod-in-cpp), начните с нового патча, добавьте необходимые терминалы и `not-implemented-in-xod`. +Как и обычно, когда вы [создаете ноду C++](https://github.com/bgoncharov/xod-docs/blob/master/docs/guide/nodes-for-xod-in-cpp), начинайте с нового патча, добавьте необходимые терминалmyst ноды и `not-implemented-in-xod`. ![`not-implemented-in-xod`](https://github.com/bgoncharov/xod-docs/blob/master/docs/guide/cpp-time/outline.patch.png) -Не забудьте указать подходящее значение по умолчанию для `T`. 1 секунда - отлично. +Не забудьте указать нужное значение по умолчанию для `T`. 1 секунда - отлично. Дважды щелкните `not-implemented-in-xod`, чтобы открыть редактор кода. # Установка таймаута -Сначала мы должны обработать сигналы на входе SET. После этого мы бвоспуользуемся функцией setTimeout, чтобы запросить XOD снова вызвать `evaluate` после заданного нами времени ожидания: +Сначала мы должны обработать сигналы на входе `SET`. После этого мы воспуользуемся функцией [`setTimeout`](https://github.com/bgoncharov/xod-docs/tree/master/docs/reference/node-cpp-api#setTimeout), чтобы попросить XOD снова вызвать `evaluate` после заданного нами времени ожидания: ```c++ struct State { }; @@ -45,7 +45,7 @@ void evaluate(Context ctx) { # Управление таймаутами -Отлично. Мы сделали расписание. Теперь нужно сделать действие. Для этого используйте функцию [`isTimedOut`](https://github.com/bgoncharov/xod-docs/blob/master/docs/reference/node-cpp-api/#isTimedOut). Нам нужна явная проверка того, является ли текущая эвалюация вызванной таймаутом, поскольку причины для `evaluate` вызовов могут быть разные. Это можгут быть обновленные входные значения до истечения временного интервала. +Отлично. Мы "запланировали" сами себя. Теперь нужно среагировать. Для этого воспользуемся функцию [`isTimedOut`](https://github.com/bgoncharov/xod-docs/blob/master/docs/reference/node-cpp-api/#isTimedOut). Нам нужна явная проверка того, вызвана ли текущая переоценка нашим таймаутом, поскольку причины для `evaluate` вызовов могут быть разные. Например, это могут быть обновленные входные значения, полученные до истечения временного интервала. ```c++ struct State { }; @@ -77,7 +77,7 @@ void evaluate(Context ctx) { # Отмена таймаута -Единственное, что нам осталось сделать - сбросить настройки. Когда сигнал посылается в `RST`, мы используем функцию [`clearTimeout`](https://github.com/bgoncharov/xod-docs/blob/master/docs/reference/node-cpp-api/#clearTimeout), чтобы остановить счет. +Последнее, что нам осталось сделать - сбросить настройки. Когда сигнал посылается в `RST`, мы используем функцию [`clearTimeout`](https://github.com/bgoncharov/xod-docs/blob/master/docs/reference/node-cpp-api/#clearTimeout), чтобы остановить отсчет. ```c++ struct State { }; @@ -114,7 +114,7 @@ void evaluate(Context ctx) { # Тест -Вот и все. Наша нода готова. Проверьте это двумя кнопками, подключенными к `SET` и `RST` и триггером со светодиодом на другой стороне +Вот и все. Наша нода готова. Проверить это можно двумя кнопками, подключенными к `SET` и `RST` и триггером со светодиодом на другой стороне ![Test](https://github.com/bgoncharov/xod-docs/blob/master/docs/guide/cpp-time/test.patch.png) @@ -122,7 +122,7 @@ void evaluate(Context ctx) { XOD предоставляет довольно простой API для управления временем. Хоть это и просто, вы получаете все инструменты, необходимые для управления длительными процессами. Основные принципы: -* Используйте `setTimeout`, чтобы запланировать повторную эвалюацию. Помните, что таймауты задаются в миллисекундах. -* Всегда используйте `isTimedOut`, чтобы убедиться, что вы оцениваете, потому что прошло время. -* Если вы хотите периодически запускать задачу, то вызывайте `setTimeout` повторно вручную когда `isTimedOut`. +* Используйте `setTimeout`, чтобы запланировать повторную переназначения. Помните, что таймауты задаются в миллисекундах. +* Всегда используйте `isTimedOut`, потому что время уже прошло. +* Если вы хотите периодически запускать задачу, то вызывайте повторно `setTimeout` вручную, когда `isTimedOut`. * Используйте `clearTimeout`, чтобы убедиться, что отсчет таймера запущен. From 81de80f1423b77fdeaf5921b6824d735d94492e5 Mon Sep 17 00:00:00 2001 From: Evgeny Kochetkov Date: Tue, 18 Dec 2018 09:10:43 -0500 Subject: [PATCH 10/13] Apply suggestions from code review Co-Authored-By: bgoncharov --- docs/guide/cpp-time/RU.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/guide/cpp-time/RU.md b/docs/guide/cpp-time/RU.md index 2e02e415..1e707cfd 100644 --- a/docs/guide/cpp-time/RU.md +++ b/docs/guide/cpp-time/RU.md @@ -1,20 +1,20 @@ # Работа со временем в C++ -Большинство нод моментально реагируют на получаемые изменения, но некоторые из них управляют процессами, продолжающимися в течение длительного времени. После определнной задержки они переопределяют себя, чтобы повторить задачу или завершить свою работу. +Большинство нод моментально реагируют на получаемые изменения, но некоторые из них управляют процессами, продолжающимися в течение длительного времени. После определнной задержки они повторно выполняются, чтобы повторить задачу или завершить свою работу. -[API ноды XOD C++](https://github.com/bgoncharov/xod-docs/blob/master/docs/reference/node-cpp-api) предоставляет функции планирования для решения таких задач. В этой статье мы рассмотрим их на примере. +[API ноды XOD C++](/docs/reference/node-cpp-api) предоставляет функции планирования для решения таких задач. В этой статье мы рассмотрим их на примере. # Задача Мы собираемся реализовать ноду `tick`, которая при нажатии кнопки `SET` начинает посылать сигналы через равные промежутки времени `T`. Пользователь должен иметь возможность отменить выполняемую операцию, отправив сигнал на вход `RST`. -На самом деле вы могли бы просто организовать такую ноду скомбенировав `flip-flop` и `clock`, без испольщования C++, но сейчас мы это проигнорируем. +На самом деле вы могли бы просто организовать такую ноду скомбинировав `flip-flop` и `clock`, без использования C++, но сейчас мы это проигнорируем. # Подготовка ноды -Как и обычно, когда вы [создаете ноду C++](https://github.com/bgoncharov/xod-docs/blob/master/docs/guide/nodes-for-xod-in-cpp), начинайте с нового патча, добавьте необходимые терминалmyst ноды и `not-implemented-in-xod`. +Как и обычно, когда вы [создаете ноду C++](/docs/guide/nodes-for-xod-in-cpp), начинайте с нового патча, добавьте необходимые ноды-терминалы и `not-implemented-in-xod`. -![`not-implemented-in-xod`](https://github.com/bgoncharov/xod-docs/blob/master/docs/guide/cpp-time/outline.patch.png) +![`not-implemented-in-xod`](/xod-docs/blob/master/docs/guide/cpp-time/outline.patch.png) Не забудьте указать нужное значение по умолчанию для `T`. 1 секунда - отлично. @@ -22,7 +22,7 @@ # Установка таймаута -Сначала мы должны обработать сигналы на входе `SET`. После этого мы воспуользуемся функцией [`setTimeout`](https://github.com/bgoncharov/xod-docs/tree/master/docs/reference/node-cpp-api#setTimeout), чтобы попросить XOD снова вызвать `evaluate` после заданного нами времени ожидания: +Сначала мы должны обработать сигналы на входе `SET`. После этого мы воспуользуемся функцией [`setTimeout`](/docs/reference/node-cpp-api#setTimeout), чтобы попросить XOD снова вызвать `evaluate` после заданного нами времени ожидания: ```c++ struct State { }; @@ -45,7 +45,7 @@ void evaluate(Context ctx) { # Управление таймаутами -Отлично. Мы "запланировали" сами себя. Теперь нужно среагировать. Для этого воспользуемся функцию [`isTimedOut`](https://github.com/bgoncharov/xod-docs/blob/master/docs/reference/node-cpp-api/#isTimedOut). Нам нужна явная проверка того, вызвана ли текущая переоценка нашим таймаутом, поскольку причины для `evaluate` вызовов могут быть разные. Например, это могут быть обновленные входные значения, полученные до истечения временного интервала. +Отлично. Мы "запланировали" сами себя. Теперь нужно среагировать. Для этого воспользуемся функцию [`isTimedOut`](/docs/reference/node-cpp-api/#isTimedOut). Нам нужна явная проверка того, вызвана ли текущая переоценка нашим таймаутом, поскольку причины для `evaluate` вызовов могут быть разные. Например, это могут быть обновленные входные значения, полученные до истечения временного интервала. ```c++ struct State { }; @@ -77,7 +77,7 @@ void evaluate(Context ctx) { # Отмена таймаута -Последнее, что нам осталось сделать - сбросить настройки. Когда сигнал посылается в `RST`, мы используем функцию [`clearTimeout`](https://github.com/bgoncharov/xod-docs/blob/master/docs/reference/node-cpp-api/#clearTimeout), чтобы остановить отсчет. +Последнее, что нам осталось сделать - сбросить настройки. Когда сигнал посылается в `RST`, мы используем функцию [`clearTimeout`](/docs/reference/node-cpp-api/#clearTimeout), чтобы остановить отсчет. ```c++ struct State { }; @@ -116,7 +116,7 @@ void evaluate(Context ctx) { Вот и все. Наша нода готова. Проверить это можно двумя кнопками, подключенными к `SET` и `RST` и триггером со светодиодом на другой стороне -![Test](https://github.com/bgoncharov/xod-docs/blob/master/docs/guide/cpp-time/test.patch.png) +![Test](/docs/guide/cpp-time/test.patch.png) # Заключение From 84699ab489c87d351072c0db127314984873ea10 Mon Sep 17 00:00:00 2001 From: Evgeny Kochetkov Date: Tue, 18 Dec 2018 09:21:18 -0500 Subject: [PATCH 11/13] Apply suggestions from code review Co-Authored-By: bgoncharov --- docs/guide/cpp-time/RU.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/guide/cpp-time/RU.md b/docs/guide/cpp-time/RU.md index 1e707cfd..18574c27 100644 --- a/docs/guide/cpp-time/RU.md +++ b/docs/guide/cpp-time/RU.md @@ -14,7 +14,7 @@ Как и обычно, когда вы [создаете ноду C++](/docs/guide/nodes-for-xod-in-cpp), начинайте с нового патча, добавьте необходимые ноды-терминалы и `not-implemented-in-xod`. -![`not-implemented-in-xod`](/xod-docs/blob/master/docs/guide/cpp-time/outline.patch.png) +![`not-implemented-in-xod`](/docs/guide/cpp-time/outline.patch.png) Не забудьте указать нужное значение по умолчанию для `T`. 1 секунда - отлично. From 25e7db95e1a496d063826fb36283b0bc530ee5c7 Mon Sep 17 00:00:00 2001 From: Victor Nakoryakov Date: Mon, 4 Mar 2019 22:45:35 -0800 Subject: [PATCH 12/13] Apply suggestions from code review Co-Authored-By: bgoncharov --- docs/guide/cpp-time/RU.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/guide/cpp-time/RU.md b/docs/guide/cpp-time/RU.md index 18574c27..27513a83 100644 --- a/docs/guide/cpp-time/RU.md +++ b/docs/guide/cpp-time/RU.md @@ -4,13 +4,13 @@ [API ноды XOD C++](/docs/reference/node-cpp-api) предоставляет функции планирования для решения таких задач. В этой статье мы рассмотрим их на примере. -# Задача +## Задача Мы собираемся реализовать ноду `tick`, которая при нажатии кнопки `SET` начинает посылать сигналы через равные промежутки времени `T`. Пользователь должен иметь возможность отменить выполняемую операцию, отправив сигнал на вход `RST`. На самом деле вы могли бы просто организовать такую ноду скомбинировав `flip-flop` и `clock`, без использования C++, но сейчас мы это проигнорируем. -# Подготовка ноды +## Подготовка ноды Как и обычно, когда вы [создаете ноду C++](/docs/guide/nodes-for-xod-in-cpp), начинайте с нового патча, добавьте необходимые ноды-терминалы и `not-implemented-in-xod`. @@ -43,7 +43,7 @@ void evaluate(Context ctx) { } ``` -# Управление таймаутами +## Управление таймаутами Отлично. Мы "запланировали" сами себя. Теперь нужно среагировать. Для этого воспользуемся функцию [`isTimedOut`](/docs/reference/node-cpp-api/#isTimedOut). Нам нужна явная проверка того, вызвана ли текущая переоценка нашим таймаутом, поскольку причины для `evaluate` вызовов могут быть разные. Например, это могут быть обновленные входные значения, полученные до истечения временного интервала. @@ -75,7 +75,7 @@ void evaluate(Context ctx) { } ``` -# Отмена таймаута +## Отмена таймаута Последнее, что нам осталось сделать - сбросить настройки. Когда сигнал посылается в `RST`, мы используем функцию [`clearTimeout`](/docs/reference/node-cpp-api/#clearTimeout), чтобы остановить отсчет. @@ -112,13 +112,13 @@ void evaluate(Context ctx) { } ``` -# Тест +## Тест Вот и все. Наша нода готова. Проверить это можно двумя кнопками, подключенными к `SET` и `RST` и триггером со светодиодом на другой стороне ![Test](/docs/guide/cpp-time/test.patch.png) -# Заключение +## Заключение XOD предоставляет довольно простой API для управления временем. Хоть это и просто, вы получаете все инструменты, необходимые для управления длительными процессами. Основные принципы: From 5bc09b4dfb818009b414b58e5765fea933b80462 Mon Sep 17 00:00:00 2001 From: Victor Nakoryakov Date: Tue, 5 Mar 2019 19:42:31 -0800 Subject: [PATCH 13/13] Update docs/guide/cpp-time/RU.md Co-Authored-By: bgoncharov --- docs/guide/cpp-time/RU.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/guide/cpp-time/RU.md b/docs/guide/cpp-time/RU.md index 27513a83..7493e426 100644 --- a/docs/guide/cpp-time/RU.md +++ b/docs/guide/cpp-time/RU.md @@ -20,7 +20,7 @@ Дважды щелкните `not-implemented-in-xod`, чтобы открыть редактор кода. -# Установка таймаута +## Установка таймаута Сначала мы должны обработать сигналы на входе `SET`. После этого мы воспуользуемся функцией [`setTimeout`](/docs/reference/node-cpp-api#setTimeout), чтобы попросить XOD снова вызвать `evaluate` после заданного нами времени ожидания: