Add a timeout to runOnce

This allows runOnce to be interwoven with other polling mechanisms.
This commit is contained in:
Emery Hemingway 2024-05-22 04:54:31 +02:00
parent 8f35a1256c
commit aaaf373468
1 changed files with 4 additions and 4 deletions

View File

@ -745,16 +745,16 @@ proc runPendingTurns* =
terminateActor(turn, err)
raise err
proc runOnce*: bool {.discardable.} =
proc runOnce*(timeout = none(Duration)): bool {.discardable.} =
## Run pending turns if there are any, otherwise
## poll for external events and run any resulting turns.
## Return true if any turns have been processed.
if turnQueue.len == 0:
when defined(solo5):
discard solo5_dispatcher.runOnce()
discard solo5_dispatcher.runOnce(timeout)
else:
var ready: seq[Continuation]
ioqueue.poll(ready)
ioqueue.poll(ready, timeout)
while ready.len > 0:
discard trampoline:
ready.pop()
@ -764,7 +764,7 @@ proc runOnce*: bool {.discardable.} =
proc run* =
## Run actors to completion.
when defined(solo5):
while turnQueue.len > 0 or solo5_dispatcher.runOnce():
while turnQueue.len > 0 or solo5_dispatcher.runOnce(timeout):
runPendingTurns()
else:
var ready: seq[Continuation]