virtually requires that we create all threads initially. The scheduler never returns (there is an API call to exit the scheduler, but that isn’t particularly useful for our applications). A more complete example, with two threads that blink two LEDs is illustrated in Listing 16.1. Notice that the threads utilize vTaskDelay to sleep.