使用Arduino的意外lambda行为C ++

时间:2016-06-12 23:41:33

标签: c++ lambda arduino

我试图理解为什么第二个millis()计时器不能像我预期的那样工作。使用lambdas时是否有一些我不理解的封装?或者也许我只是没有看到什么!

loop()中的第二个表达式不打印,第一个表达式为:

unsigned long timerVal = 0;
void setup() 
{
  Serial.begin(9600);
  Serial.println();
}
void loop() 
{
  [&timerVal](unsigned long currentTime){if(currentTime - timerVal > 1000UL) {Serial.println("Hello World"); timerVal += 1000UL;}}(millis());
  [&timerVal](){if(millis() - timerVal > 1000UL) {Serial.println("Why Not Me?"); timerVal += 1000UL;}};
}

1 个答案:

答案 0 :(得分:2)

第一个lambda被调用是因为你调用它,第二个没有被调用...将调用()添加到lambda的最后。

void loop() 
{
  [&timerVal](unsigned long currentTime){if(currentTime - timerVal > 1000UL) {Serial.println("Hello World"); timerVal += 1000UL;}}
   (millis());  //<--call

  [&timerVal](){if(millis() - timerVal > 1000UL) {Serial.println("Why Not Me?"); timerVal += 1000UL;}}
     (); /// now, we call... :-)
}