S.l.e!ep.¢%

像打了激速一样,以四倍的速度运转,开心的工作
简单、开放、平等的公司文化;尊重个性、自由与个人价值;
posts - 1098, comments - 335, trackbacks - 0, articles - 1
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

WaitForSingleObject & UI

Posted on 2009-05-02 11:32 S.l.e!ep.¢% 阅读(2513) 评论(2)  编辑 收藏 引用 所属分类: MulThreads
在一个程序中,用了IOCP、多线程
在多线程程序中,需要同步,用了 WaitForSingleObject

在主线程使用 WaitForSingleObject 会有以下的问题
http://www.cppblog.com/sleepwom/archive/2009/01/18/72268.html
http://www.cppblog.com/sleepwom/archive/2008/12/18/69706.html

后来使用了 MsgWaitForMultipleObjects  API
结果又产生了新的问题
http://www.cppblog.com/sleepwom/archive/2009/04/22/80793.html

MsgWaitForMultipleObjects 一边 wait for object 一边处理消息
如果运气差,处理了一个“阻塞”的消息,那么即使 object 被激活了,也不会返回

早上起床突然有了个新的想法
  

在UI不使用 WaitForSingleObject 之类的API,然后在本机创建一个服务,UI 层通过发送消息包去处理需要 Wait 的东西,然后在 Service 里使用 WaitForSingleObject

这样一来,UI层就变得简单多了,也可以避免因为使用WaitForSingleObject而出现界面死锁的现象, 但 UI 和 service 之间多了一层协议 ……

Feedback

# re: WaitForSingleObject & UI  回复  更多评论   

2009-06-15 11:06 by 老羽
我晕, 要这么复杂?
多线程中向UIPost一个自定义的Message,然后把需要处理的关联的上下文数据和回调函数放到队列中,UI收到Message,就从队列中获取数据,然后调用方法。

ps:.net中多线程和UI交互也是这样设计的。。。。。

# re: WaitForSingleObject & UI  回复  更多评论   

2009-07-22 18:52 by Sleepwom
@老羽

我的问题是,
UI 跟 多线程里面 都需要共同访问一个 [资源]
这里需要 UI 和 多线程里面 都加上"锁"

而UI加锁就有本文所说的问题。

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理