Files
msime-windows/windows
fanlusky 44caaefcec perf(windows): 健康路径去掉多余的排空投递,删除死掉的 50 ms 硬读取
健康路径上 OnKeyDown 把键入队后立即同步排空(Excel 首键修复,保留),但入队时
仍先投递一条 WM_DrainDeferredKeyDown。同步排空已经把这颗键取出:它要么还在
飞行中、要么已完成,那条消息运行时只会看到「有键在飞」或「队列为空」而直接
返回;后面排队的键由这颗键完成时自己安排排空。所以现在入队时不再投递,同步
排空之后只在键仍留在队列里(焦点会话未连上或刚开了重置)时才补一次投递,
这两种情况与原先的行为一致。每个健康按键省掉一次 PostMessage 和一次空转的
窗口消息。PeekNamedPipe 存活探测不动。

同时删除已确认没有调用者的硬读取路径:ReadDataFromServerViaNamedPipe、
单参数的 TryReadDataFromServerPipeWithTimeout(50 ms 超时即拆管道),以及
ClearNamedpipeDataIfExists——它唯一存活的调用不带 force,函数体什么也不做。
2026-09-27 19:05:59 +08:00
..

windows —— TSF 文本服务

水杉输入法在 Windows 上的前端:一个纯 TSF 方案的文本服务 DLL,注入宿主进程,负责按键预判、焦点与线程归属、composition 的 edit session 写入,以及与 Server 之间的命名管道协议。候选窗、工具栏、设置页和实际的候选计算都在 ../server/,本目录只做宿主适配。

产品介绍、安装和功能说明见仓库根目录的 README;本目录的代码地图、TSF/COM 硬约定和改动要求见 AGENTS.md。

构建

从仓库根目录配置,源码目录是本目录:

cmake -S windows -B windows/build -A x64 `
  -DCMAKE_TOOLCHAIN_FILE="$env:VCPKG_INSTALLATION_ROOT/scripts/buildsystems/vcpkg.cmake" `
  -DVCPKG_TARGET_TRIPLET=x64-windows-static
cmake --build windows/build --config Release --parallel
ctest --test-dir windows/build -C Release --output-on-failure

Win32 用 -A Win32 和 x86-windows-static;安装包两种架构都要。scripts/ 下是本机开发用的生成、构建、注册和签名脚本,从本目录运行。

引擎契约来自 ../engine/contracts/,是本仓的目录,普通检出就有。TSF 只引用这些头文件,不链接引擎运行库。