AskaEth
b1c6d5d54a
fix(installer): 定时器分辨率 1.5 秒 → 改用 nsDialogs 定时器(拖不动/进度跳/卡收尾三症状同根)
真机取证:StdUtils.TimerCreate 实测**每 ~1500ms 才跳一次**(真机 tick 计数 7 次/10.7 秒),
且请求 4/20/60/250ms 四个间隔出来的都是 1500ms 且完全同步 —— 等于与请求值无关的低分辨率实现。
上一版拿它做 60ms 轮询,于是:
- **窗口拖不动**:1.5 秒才采一次光标,而人手一次拖(按下→移动→松开)不到 1.5 秒,
永远采不到「左键按下」那一刻。判别性实验(wine,人手速度 ~0.6 秒):旧代码 dx=0/dy=0,
新代码 dx=200/dy=100。(上一轮 wine 测的是 6 秒慢速拖,慢到 1.5s 的 tick 也能采到,所以漏了。)
- **进度只显示 0% 与 100%**:真因不是 tick,而是分段耗时极不均匀(几乎全在解压,后 4 段每段 <1ms)
→ 每段加 400ms 下限,真机 trace 407/484/656ms,肉眼可见。
- **装完卡在「收尾」**:翻页那次 BM_CLICK 只发一次,丢了就永远停在第 4 页 → 改成装完后每 tick 重试
($instDone 门防止安装途中的 Sleep 泵出 tick 乱点)。
- 顺带修好 P5「完成」页:定时器改为每页重建,P5 有独立一份,悬停与拖动都恢复。
改法:${StdUtils.TimerCreate} → ${NSD_CreateTimer}(挂在当前页对话框上,每页 NewPage 重建、
KillTick 里 ${NSD_KillTimer},删掉 $timerId);Stage 加 STAGE_DWELL 400 + GetTickCount 补 Sleep。
真机验证:每页 tick ≈63ms 且 P1..P5 都活着;分段停留 ≥400ms;P4 自动翻到完成页;
静默 /S exit=0 / 7.8s、旧版在跑时 exit=0 / 10.5s 且 running_after=0。
wine 回归:人手速度拖动、原生控件隐藏、P3 翻页、✕ 退出无 StdUtils 报错、/S /currentuser /D= 正常。
真机无输入桌面,鼠标驱动的悬停/拖动只能靠 wine 几何证据 + 真机 tick 频率证据。
2026-09-13 21:13:02 +08:00
..
2026-09-13 15:20:18 +08:00
2026-09-13 15:20:18 +08:00
2026-09-13 21:13:02 +08:00
2026-09-13 15:20:18 +08:00