免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5186 | 回复: 17
打印 上一主题 下一主题

[C] 如何实现linux c下的观察者模式,有推荐的基础库没 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-01-23 15:34 |只看该作者 |倒序浏览
linux c下貌似没有提供观察者,发布/订阅这种模式的通信模型,而java,android都在语言级或系统级提供了相关的接口,方便开发者的开发工作。

不知道在linux下做c开发的,都是如何解决类似的问题/需求。

目前我遇到的问题就是n个线程,都想获取某个事件变化的消息,如何实现这种1对n的消息通知,不知道大家是如何解决的,

是否有一些开源的基础库,又或者有其他方式解决解决我上面提到的需求。

谢谢!

论坛徽章:
36
子鼠
日期:2013-08-28 22:23:29黄金圣斗士
日期:2015-12-01 11:37:51程序设计版块每日发帖之星
日期:2015-12-14 06:20:00CU十四周年纪念徽章
日期:2015-12-22 16:50:40IT运维版块每日发帖之星
日期:2016-01-25 06:20:0015-16赛季CBA联赛之深圳
日期:2016-01-27 10:31:172016猴年福章徽章
日期:2016-02-18 15:30:3415-16赛季CBA联赛之福建
日期:2016-04-07 11:25:2215-16赛季CBA联赛之青岛
日期:2016-04-29 18:02:5915-16赛季CBA联赛之北控
日期:2016-06-20 17:38:50技术图书徽章
日期:2016-07-19 13:54:03程序设计版块每日发帖之星
日期:2016-08-21 06:20:00
2 [报告]
发表于 2016-01-23 16:11 |只看该作者
你监听某个 signal,有事情的时候给你发个,相当于观察者。
自己实现,就是key-value和data,key是事件,value是你的handler,data是事件发生时传给你的handler的参数,随便搞搞,不就有了。

论坛徽章:
0
3 [报告]
发表于 2016-01-24 13:15 |只看该作者
回复 2# cokeboL


    1.signal的话,由于状态比较多,要注册很多处理函数,并且貌似多线程中signal不是很好用,处理不好就crash了
    2.自己实现key-value这种,主要就是不同线程间消息的传递,线程x的事件不可能依次给其他线程2,线程3,... 线程n发消息啊。

论坛徽章:
0
4 [报告]
发表于 2016-01-24 13:16 |只看该作者
回复 2# cokeboL


    1.signal的话,由于状态比较多,要注册很多处理函数,并且貌似多线程中signal不是很好用,处理不好就crash了
    2.自己实现key-value这种,主要就是不同线程间消息的传递,线程x的事件不可能依次给其他线程2,线程3,... 线程n发消息啊。

论坛徽章:
0
5 [报告]
发表于 2016-01-24 13:17 |只看该作者
回复 2# cokeboL


        1.signal的话,由于状态比较多,要注册很多处理函数,并且貌似多线程中signal不是很好用,处理不好就crash了
        2.自己实现key-value这种,主要就是不同线程间消息的传递,线程x的事件不可能依次给其他线程2,线程3,... 线程n发消息啊。

论坛徽章:
0
6 [报告]
发表于 2016-01-24 18:45 |只看该作者
github.com/zhouzhenghui/c-sigslot/

论坛徽章:
5
处女座
日期:2014-10-15 11:57:302015年亚洲杯之中国
日期:2015-03-04 17:05:552015亚冠之西悉尼流浪者
日期:2015-07-31 12:14:2915-16赛季CBA联赛之同曦
日期:2015-12-10 18:14:0615-16赛季CBA联赛之北京
日期:2016-07-07 17:01:53
7 [报告]
发表于 2016-01-25 10:49 |只看该作者
本帖最后由 zhanglin496 于 2016-01-25 10:53 编辑

1、楼主可能是需要一个消息总线机制,可以参考ubus, dbus,自己用unix域套机字实现也可以,或者不想管理资源,可以利用netlink的广播机制,但是要写一个内核模块。
2、我也建议不要用传统的signal信号方式,连linux都提供了singalfd函数,还是转化为套接字来处理比交符合趋势。

论坛徽章:
36
子鼠
日期:2013-08-28 22:23:29黄金圣斗士
日期:2015-12-01 11:37:51程序设计版块每日发帖之星
日期:2015-12-14 06:20:00CU十四周年纪念徽章
日期:2015-12-22 16:50:40IT运维版块每日发帖之星
日期:2016-01-25 06:20:0015-16赛季CBA联赛之深圳
日期:2016-01-27 10:31:172016猴年福章徽章
日期:2016-02-18 15:30:3415-16赛季CBA联赛之福建
日期:2016-04-07 11:25:2215-16赛季CBA联赛之青岛
日期:2016-04-29 18:02:5915-16赛季CBA联赛之北控
日期:2016-06-20 17:38:50技术图书徽章
日期:2016-07-19 13:54:03程序设计版块每日发帖之星
日期:2016-08-21 06:20:00
8 [报告]
发表于 2016-01-25 11:52 |只看该作者
回复 3# image_s


    signal只是举例子相当于观察者,signal打断和多线程都不好
    key value实现,跟线程无关,放全局的,需要同步之类的是你自己在回调里处理的

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
9 [报告]
发表于 2016-01-25 12:57 |只看该作者
自己开个端口慢慢搞呗

论坛徽章:
3
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:032015年亚洲杯之中国
日期:2015-04-22 15:52:45
10 [报告]
发表于 2016-01-25 13:28 |只看该作者
cjaizss 发表于 2016-01-25 12:57
自己开个端口慢慢搞呗


正想说这个, 非C/C++系的就爱各种架构各种模式各种组件, 然后制造各种问题, 然后投入各种人力解决各种问题......
C/C++的人爱直接开个TCP端口, 谁订阅, 谁连接上来, 我有事抄送你一份.....
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP