免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: romanempire
打印 上一主题 下一主题

各路英雄,在下有理啦! [复制链接]

论坛徽章:
0
11 [报告]
发表于 2003-01-17 22:13 |只看该作者

各路英雄,在下有理啦!

原帖由 "channelV" 发表:
其实是一样的了,unix/linux据我所知好像还没有提供这样的函数,你可以自己来写一个函数,里面是一个循环
waitformultipleobject--
for(int i=0; i<##; i++)
{
     if(sem_wait() != wait_object_0)
   ..........


你用sem_wait
那么就会阻塞在那了
因为sem_wait是阻塞函数
所以不能实现这个功能

论坛徽章:
0
12 [报告]
发表于 2003-01-17 22:16 |只看该作者

各路英雄,在下有理啦!

如果是想等待所有事件的话那么用channelV  
的代码好了
但是如果是想等待某个事件的话
要另想办法

你看select函数对信号有没有用吧
如果有用的话那么可以用select实现

不然还是改用条件变量通知好了(当然代码要修改)

论坛徽章:
0
13 [报告]
发表于 2003-01-17 22:18 |只看该作者

各路英雄,在下有理啦!

原帖由 "无双" 发表:


你用sem_wait
那么就会阻塞在那了
因为sem_wait是阻塞函数
所以不能实现这个功能


我现在可以这样做个试验,使用定时器,在时间范围内,我就用阻赛调用,
超时后,再循环检测下一个信号灯。谢谢两位。等我的消息吧。

论坛徽章:
0
14 [报告]
发表于 2003-01-17 22:21 |只看该作者

各路英雄,在下有理啦!

如果不能实现的话并且是在一个进程内同步的话
那么可以用
pthread_cond_timedwait

sem_trywait(S V 信号下使用相同功能的函数)

当一个信号释放时发一个cond 事件

waitformultipleobject函数等待这个事件
检查所有信号的锁状态

论坛徽章:
0
15 [报告]
发表于 2003-01-18 13:48 |只看该作者

各路英雄,在下有理啦!

问题已经解决,
虽然不是很完美,
但问题基本上解决啦,
我是通过定时器发送系统信号,
然后在waitformultipleobject函数中捕捉并检查该信号,
这样不仅完成了函数的阻塞也实现了轮训各个信号灯。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP