Wait until a condition is met, with check-pump-delay logic.
- Parameters
-
| condition | Function that returns true when waiting should stop |
| timeoutMs | Optional timeout in milliseconds (0 = no timeout) |
- Returns
- true if condition was met, false if timeout occurred
- Note
- Runs async_run() on each iteration and delays intelligently to avoid busy-waiting
Definition at line 424 of file manager.cpp.hpp.
424 {
425 const u32 startTime = timeoutMs > 0 ?
millis() : 0;
426
427
428
429 if (condition()) {
430 return true;
431 }
432
433
434
435
436
437 {
439 if (spinBudget > 0) {
441 while ((
fl::micros() - spinStart) < spinBudget) {
442 if (condition()) {
443 return true;
444 }
445 if (timeoutMs > 0 && (
millis() - startTime) >= timeoutMs) {
446 FL_ERROR(
"ChannelManager: Timeout occurred while waiting for condition");
447 return false;
448 }
449 }
450 }
451 }
452
453 while (!condition()) {
454
455 if (timeoutMs > 0 && (
millis() - startTime >= timeoutMs)) {
456 FL_ERROR(
"ChannelManager: Timeout occurred while waiting for condition");
457 return false;
458 }
459
461 if (sliceMs == 0) {
462 return false;
463 }
465 continue;
466 }
467
468
469
470
471
472
473
474
475
476
477
478
479
480
482
484 } else {
485
487 }
488 }
489
490 return true;
491}
bool waitForPollNeededSignal(u32 timeoutMs) FL_NOEXCEPT
u32 pollNeededWaitSliceMs(u32 startTime, u32 timeoutMs) const FL_NOEXCEPT
static bool isAnyNetworkActive() FL_NOEXCEPT
fl::u32 getWaitSpinBudgetUs() FL_NOEXCEPT
Get the current tiered-wait spin budget (microseconds).
void run(fl::u32 microseconds, ExecFlags flags)
Run selected task subsystems.
fl::u32 millis()
Universal millisecond timer - returns milliseconds since system startup.
fl::u32 micros()
Universal microsecond timer - returns microseconds since system startup.
References FL_ERROR, fl::detail::getWaitSpinBudgetUs(), fl::net::NetworkDetector::isAnyNetworkActive(), fl::micros(), fl::millis(), pollNeededWaitSliceMs(), fl::task::run(), fl::task::SYSTEM, and waitForPollNeededSignal().
Referenced by waitForReady(), and waitForReadyOrDraining().