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