2016-06-12 18 views
2

私が期待するように、2番目のmillis()タイマーが動作しない理由を理解しようとしています。ラムダを使用している間にわからないカプセル化がありますか?または、私は何かを見ていないだけかもしれない!予期しないラムダ動作C++とArduino

ループにおける第二の式は、()印刷されない、最初の処理が行われます。あなたはそれを呼ばれるので

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;}}; 
} 

答えて

2

最初のラムダは()に呼び出しを追加... 2番目が呼び出されなかった、と呼ばれていましたラムダの最後。

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... :-) 
} 
+0

ブリリアント!私は、私の予想される問題の部分Bが真実だと思います。 –