V
V
Viktor Paperno2017-01-09 20:44:08
Arduino
Viktor Paperno, 2017-01-09 20:44:08

Running parallel streams from setup, not from loop?

Работаю с внешними устройствами. Мне нужно одновременно выполнить несколько команд. Я решил воспользоваться библиотекой ArduinoThread. Делаю всё как в примере, но если я хочу запустить только один раз, из setup() - ничего не происходит.
В примере перемещение controll.run(); в setup() не помешало работе, а в случае вызова функции из другой библиотеки - ничего не происходит. Если в loop - то всё нормально.
Что делать? Приму любые советы.

Answer the question

In order to leave comments, you need to log in

1 answer(s)
Y
Yuri, 2017-01-09
@riky

Once upon a time, I also made a library for pseudo-threads.
controll.run(); должен быть в loop.
вы же понимаете что никакой многопоточности в ардуино быть не может. controll.run в каждой итерации loop проверяет все подключенные обработчики/thread и если пришло их время запускает эти функции. никакого волшебства, ровно как и никаких реальных потоков.
если вы не вызываете controll.run в loop то эти обработчики никогда не будут запущены.
также учтите что код в обработчиках не выполняется параллельно!!!
то есть если 2 функции(thread) которые там добавлены выполняются каждая по 1 секунде (например они содержат sleep внутри себя) то они будут выполнены ровно по очереди и вместе будут выполняться 2 секунды, а не 1 секунду как было бы при честной многопоточности.
or another option to do their launch by condition

initTime = millis() + 5000;

loop() {
   if (millis() < initTime) {
      controll.run(); 
  }
}

controll.run will only run for the first 5 seconds. if you do not want to incur extra overhead in normal post-launch work.
UPD: read how EventLoop works in any programming languages ​​and libraries.

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question