Optionally process all triggered EventResponder events on a single yield() call #703
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Previous code required one yield() call for each triggered event in the list, potentially leading to high latency if many EventResponder objects are in use in a system with long intervals between calls to yield().
This update optionally changes that behaviour. The user can either:
EventResponder::processAllEvents(true);
to ensure every triggered event is processed on the next yield()triggerEventNextYield()
function with the same syntax astriggerEvent()
to get finer-grained controlIf the latter method is used, one event triggered using
triggerEvent()
will be responded to on each yield(), along with all events triggered bytriggerEventNextYield()
.This change also allows
EventTypeYield
responders to work in a manner consistent withEventTypeInterrupt
ones, which are all run as soon asrunFromInterrupt()
fires.As implemented, an event cannot be "promoted" to a "next yield" type if it was previously triggered by
triggerEvent()
, unlessclearEvent()
is called first.