stevenyao

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  22 随笔 :: 1 文章 :: 67 评论 :: 0 Trackbacks
估计很多软件都会遇到类似的问题,切换输入法的时候会卡一下,有时还会卡很久 1分钟左右,但是等一下还会恢复。

原因是 windows xp在初始化输入法的时候,会给进程内所有的有窗口的线程广播一个消息,等待他们回应。
如果其中一个线程阻塞了,或者干脆就没有消息循环,那么界面就会卡住。
我遇到的错误是 ,有个线程做了同步的http请求,有时候这个请求响应特别慢,甚至要等到超时。

解决方法:
1. 不要在工作线程里创建窗口
2. 不要在有窗口的线程里做阻塞操作,尤其是时间很长的
3. 如果要阻塞操作 并且必须有窗口用来收发消息,做通信,那么创建窗口的时候用  HWND_MESSAGE来做父窗口,这样的窗口是Message only的,不会被输入法广播到。

我觉得这是微软 windows的bug,但是一直都没有改,直到 windows 7才改。所以这个问题只影响xp用户。
posted on 2011-08-12 16:47 姚冬 阅读(2364) 评论(1)  编辑 收藏 引用

评论

# re: 终于找到了xp下切换输入法会卡问题的原因 2011-08-13 15:47 cr
这都让你找到了。一直遇到这个问题。  回复  更多评论
  


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理