System thread
Waiting for the system
Use waitUntil to delay the application indefinitely until the condition is met.
Use waitFor to delay the application only for a period of time or the condition is met.
Makes your application wait until/for something that the system is doing, such as waiting for Wi-Fi to be ready or the Cloud to be connected. Note: that conditions must be a function that takes a void argument function(void)
with the ()
removed, e.g. Particle.connected
instead of Particle.connected()
. Functions should return 0/false to indicate waiting, or non-zero/true to stop waiting. bool
or int
are valid return types. If a complex expression is required, a separate function should be created to evaluate that expression.
waitUntil()
// SYNTAX
waitUntil(condition);
// Wait until the Cloud is connected to publish a critical event.
waitUntil(Particle.connected);
Particle.publish("weather", "sunny");
// For Wi-Fi
waitUntil(WiFi.ready);
// For Cellular
waitUntil(Cellular.ready);
To delay the application indefinitely until the condition is met.
Note: waitUntil
does not tickle the application watchdog. If the condition you are waiting for is longer than the application watchdog timeout, the device will reset.
waitUntilNot()
Since 2.0.0:
// SYNTAX
waitUntilNot(condition);
// EXAMPLE
Particle.disconnect();
waitUntilNot(Particle.connected);
Log.info("disconnected");
To delay the application indefinitely until the condition is not met (value of condition is false)
Note: waitUntilNot
does not tickle the application watchdog. If the condition you are waiting for is longer than the application watchdog timeout, the device will reset.
waitFor()
// SYNTAX
waitFor(condition, timeout);
// wait up to 10 seconds for the cloud connection to be connected.
if (waitFor(Particle.connected, 10000)) {
Particle.publish("weather", "sunny");
}
// wait up to 10 seconds for the cloud connection to be disconnected.
// Here we have to add a function to invert the condition.
// In Device OS 2.0.0 and later you can more easily use waitFotNot()
bool notConnected() {
return !Particle.connected();
}
if (waitFor(notConnected, 10000)) {
Log.info("not connected");
}
To delay the application only for a period of time or the condition is met.
Note: waitFor
does not tickle the application watchdog. If the condition you are waiting for is longer than the application watchdog timeout, the device will reset.
waitForNot()
// SYNTAX
waitForNot(condition, timeout);
// EXAMPLE
if (waitForNot(Particle.connected, 10000)) {
Log.info("not connected");
}
Since 2.0.0:
To delay the application only for a period of time or the condition is not met (value of condition is false)
Note: waitForNot
does not tickle the application watchdog. If the condition you are waiting for is longer than the application watchdog timeout, the device will reset.