估計很多軟件都會遇到類似的問題,切換輸入法的時候會卡一下,有時還會卡很久 1分鐘左右,但是等一下還會恢復。
原因是 windows xp在初始化輸入法的時候,會給進程內所有的有窗口的線程廣播一個消息,等待他們回應。
如果其中一個線程阻塞了,或者干脆就沒有消息循環,那么界面就會卡住。
我遇到的錯誤是 ,有個線程做了同步的http請求,有時候這個請求響應特別慢,甚至要等到超時。
解決方法:
1. 不要在工作線程里創建窗口
2. 不要在有窗口的線程里做阻塞操作,尤其是時間很長的
3. 如果要阻塞操作 并且必須有窗口用來收發消息,做通信,那么創建窗口的時候用 HWND_MESSAGE來做父窗口,這樣的窗口是Message only的,不會被輸入法廣播到。
我覺得這是微軟 windows的bug,但是一直都沒有改,直到 windows 7才改。所以這個問題只影響xp用戶。