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 450 of file manager.cpp.hpp.
450 {
451 const u32 startTime = timeoutMs > 0 ?
millis() : 0;
452
453
454
455 if (condition()) {
456 return true;
457 }
458
459
460
461
462
463 {
465 if (spinBudget > 0) {
467 while ((
fl::micros() - spinStart) < spinBudget) {
468 if (condition()) {
469 return true;
470 }
471 if (timeoutMs > 0 && (
millis() - startTime) >= timeoutMs) {
472 FL_ERROR(
"ChannelManager: Timeout occurred while waiting for condition");
473 return false;
474 }
475 }
476 }
477 }
478
479 while (!condition()) {
480
481 if (timeoutMs > 0 && (
millis() - startTime >= timeoutMs)) {
482 FL_ERROR(
"ChannelManager: Timeout occurred while waiting for condition");
483 return false;
484 }
485
487 if (sliceMs == 0) {
488 return false;
489 }
491 continue;
492 }
493
494
495
496
497
498
499
500
501
502
503
504
505
506
508
510 } else {
511
513 }
514 }
515
516 return true;
517}
u32 pollNeededWaitSliceMs(u32 startTime, u32 timeoutMs) const FL_NO_EXCEPT
bool waitForPollNeededSignal(u32 timeoutMs) FL_NO_EXCEPT
static bool isAnyNetworkActive() FL_NO_EXCEPT
fl::u32 getWaitSpinBudgetUs() FL_NO_EXCEPT
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().