--- nono/vm/scheduler.cpp 2026/04/29 17:05:51 1.1.1.21 +++ nono/vm/scheduler.cpp 2026/04/29 17:06:01 1.1.1.22 @@ -9,14 +9,14 @@ // // VM スケジューラは、仮想時間とイベントを管理する。 -// 仮想時間はすべて nsec で表し、StartTime() から単調増加する。 +// 仮想時間はすべて tsec で表し、StartTime() から単調増加する。 // VM 界からは仮想時間は gScheduler->GetVirtTime() で取得する。 // -// 実時間は Syncer が管理し、こちらも nsec で表す。 +// 実時間は Syncer が管理し、こちらも tsec で表す。 // このストップウォッチも StartTime() から単調増加する。 // 実時間、仮想時間とも電源オフ中でも単調増加することに注意。 // -// 「実経過時間」は gRealtime.Elapsed() で取得でき +// 「実経過時間」は gRealtime.Elapsed_nsec() で取得できるが tsec で保持する。 // o (たぶん) Scheduler スレッド開始時から、常に増加。 // o (たぶん)ホストの時刻変更やサスペンドの影響を受けず、常に増加。 // o デバッガプロンプトで停止中は進行が停止する。 @@ -72,7 +72,7 @@ Scheduler::Scheduler() slow_top_vtime = UINT64_MAX; monitor = gMonitorManager->Regist(ID_MONITOR_SCHEDULER, this); - monitor->func = ToMonitorCallback(&Scheduler::MonitorUpdate); + monitor->SetCallback(&Scheduler::MonitorScreen); // サイズは最終的に Init2() で決まる。 monitor->SetSize(80, 9); } @@ -156,7 +156,9 @@ Scheduler::ThreadRun() // コールバック ev->count++; - ((ev->dev)->*(ev->func))(ev); + auto dev = ev->GetOwner(); + auto func = ev->GetCallback(); + (dev->*(func))(ev); } } @@ -228,7 +230,7 @@ Scheduler::StartEvent(Event *ev) // この assert を有効にすると 10 ポイント性能が低下する(502%->492%) //assertmsg(ev->IsRunning() == false, "%s", ev->GetName().c_str()); - // vtime は仮想絶対時刻 [nsec]、time は仮想相対時間 [nsec] + // vtime は仮想絶対時刻 [tsec]、time は仮想相対時間 [tsec] ev->vtime = vtime + ev->time; ev->active = true; @@ -430,13 +432,13 @@ Scheduler::Sleep(uint64 time) } void -Scheduler::MonitorUpdate(Monitor *, TextScreen& screen) +Scheduler::MonitorScreen(Monitor *, TextScreen& screen) { int y; screen.Clear(); - y = syncer->MonitorUpdateSub(screen, vtime); + y = syncer->MonitorScreenSub(screen, vtime); // 0 1 2 3 // 012345678901234567890123456789