之前写 XIM 的实现,感觉像拿着不太锋利小刀在慢慢切肉;近期写 TSF 的实现,却感觉是拿着一把超大的瑞士军刀在杀鸡。。。

TSF 采用的 COM,虽然用 C++ 来写,却像极了在写面向对象的 C,而且官方文档也是晦涩难懂;把架构拆分得细致,往往容易陷入泥潭难以自拔,这让我想起接触过的另外一家公司(Sun)代码。记得我的一位老师说过,复杂事情简单化是一门艺术,高手喜欢简单化,而笨蛋通常喜欢复杂化。

现在 EIME-TSF 实现是用了官方示例代码中的 Apartment 线程模型(即 STA),其他线程调用 ITf 类时只能通过注册的 GlobalCompartment 进行传递,然后在 CompartEventSink 中再处理,否则各种离奇错误层出不穷(虽然我已严格检查各种锁)。暂时看来,想把 Apartment 改成 Free(即 MTA 模型),虽然是快速响应的最终出路,但用到的各种 ITf 接口就要层层加锁,看来是件吃力的事情啊!

暂时在 Windows XP 上调试的场景: