估计很多软件都会遇到类似的问题,切换输入法的时候会卡一下,有时还会卡很久 1分钟左右,但是等一下还会恢复。
原因是 windows xp在初始化输入法的时候,会给进程内所有的有窗口的线程广播一个消息,等待他们回应。
如果其中一个线程阻塞了,或者干脆就没有消息循环,那么界面就会卡住。
我遇到的错误是 ,有个线程做了同步的http请求,有时候这个请求响应特别慢,甚至要等到超时。
解决方法:
1. 不要在工作线程里创建窗口
2. 不要在有窗口的线程里做阻塞操作,尤其是时间很长的
3. 如果要阻塞操作 并且必须有窗口用来收发消息,做通信,那么创建窗口的时候用 HWND_MESSAGE来做父窗口,这样的窗口是Message only的,不会被输入法广播到。
我觉得这是微软 windows的bug,但是一直都没有改,直到 windows 7才改。所以这个问题只影响xp用户。