libev+nanomsg实现多线程通信及事件轮询实例demo

概述:

       在我们刚接触程序编码的时候,我们要轮询数据有没有发过来,我们最多的可能还是使用while+sleep这样的组合,这对于处理来说是一个效率很低的方法同时还消耗cpu,那么在多线程编程中使用libev+nanomsg会不会提高效率呢。下面实例主要工作如下:A B C 三个线程通过nanomsg通信,A线程作为主线程,控制中枢,B C请求均通过A.那么在实际应用中,比如B模块是接收客户请求并解析发送控制命令的,C模块是负责干活的,A是总控,所有控制命令通过A下发到别的模块,这样维护都很方便。那看下怎么实现的吧。

实例Demo:

#include <stdio.h>
#include <stdint.h>
#include <unistd.h>
#include <string.h>
#include <time.h>
#include <ev.h>
#include <pthread.h>
#include <nanomsg/pair.h>
#include <nanomsg/nn.h>


/***************************************************************************************************
动态库:libev nanomsg
概述:A B C 三个线程通过nanomsg通信,A线程作为主线程,控制中枢,B C请求均通过A.
demo示范:
    A为指令处理模块
    B为指令接收模块
    C为指令执行模块

    B -> A   开灯
    A -> C   开灯
    C :      执行开灯
    C -> A   OK
    A -> B   OK
总结:
    这只是简单的测试使用例子,你可以通过在这个框架的基础上做更多的功能,对于多线程编程这将是一个不
错的选择.
***************************************************************************************************/

typedef struct {
    int n;          //nanomsg socket
    int s;          //nanomsg recieve fd
}nanomsg_info_t;

typedef struct {
    nanomsg_info_t ab;
    nanomsg_info_t ac;
}Aloop_ctrl_t;

typedef struct {
    nanomsg_info_t ba;
}Bloop_ctrl_t;

typedef struct {
    nanomsg_info_t ca;
}Cloop_ctrl_t;

/*获取系统时间打印*/
uint32_t print_timenow()
{
    time_t now;
    struct tm *tm_now;
    time(&now);
    tm_now = localtime(&now);
    uint32_t times = tm_now->tm_hour * 3600 + tm_now->tm_min * 60 + tm_now->tm_sec;
    printf("[%02d:%02d:%02d]\r\n", tm_now->tm_hour, tm_now->tm_min, tm_now->tm_sec);
    return times;
}

/*****************************************子线程C相关**********************************************/

static void watcher_c_cb (struct ev_loop *loop ,struct ev_io *w, int revents
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值