概述:
在我们刚接触程序编码的时候,我们要轮询数据有没有发过来,我们最多的可能还是使用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