Ereigniszustellung und Hostgrenzen korrigieren und Change archivieren
This commit is contained in:
@@ -6,8 +6,8 @@
|
||||
//! oder das Zurücklesen per `SCREEN(z, s)` nicht transportieren
|
||||
//! (Entscheidung 2026-09-03, D2).
|
||||
//!
|
||||
//! Host-Aufrufe dürfen blockieren; kooperative Zustellpunkte bringt erst die
|
||||
//! Ereignisschleife der Forms-Engine (Phase 4).
|
||||
//! Der Host besitzt Zeit und Warten; die VM liefert nur an kooperativen
|
||||
//! Zustellpunkten aus.
|
||||
|
||||
use std::collections::VecDeque;
|
||||
|
||||
@@ -165,6 +165,12 @@ pub trait Host {
|
||||
/// wenn nichts anliegt (Grundlage von `INKEY$`).
|
||||
fn next_event(&mut self, blockierend: bool) -> Option<Ereignis>;
|
||||
|
||||
/// Wartet auf Eingabe oder eine absolute Deadline in `jetzt_ms`-Zeit.
|
||||
/// `None` bedeutet: Deadline erreicht. Ohne Deadline wird bis zu einem
|
||||
/// Ereignis (gegebenenfalls explizitem Eingabeende) gewartet. Virtuelle
|
||||
/// Hosts steuern den Zeitfortschritt selbst; keine reale Rückfalluhr.
|
||||
fn warten(&mut self, deadline_ms: Option<u64>) -> Option<Ereignis>;
|
||||
|
||||
/// Monotone Zeit in Millisekunden seit Programmstart.
|
||||
///
|
||||
/// Die Fälligkeit der Zeit-Traps rechnet die Laufzeit daraus aus; sie
|
||||
@@ -260,6 +266,19 @@ impl Host for CaptureHost {
|
||||
self.ereignisse.pop_front()
|
||||
}
|
||||
|
||||
fn warten(&mut self, deadline_ms: Option<u64>) -> Option<Ereignis> {
|
||||
if let Some(event) = self.next_event(false) {
|
||||
return Some(event);
|
||||
}
|
||||
match deadline_ms {
|
||||
Some(deadline) => {
|
||||
self.uhr_ms = self.uhr_ms.max(deadline);
|
||||
None
|
||||
}
|
||||
None => Some(Ereignis::Ende),
|
||||
}
|
||||
}
|
||||
|
||||
fn jetzt_ms(&mut self) -> u64 {
|
||||
self.uhr_ms
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user