合理编写C++模块(.h、.cc)
2024-09-02 09:33:51
模块划分
合理编写模块的 demo.h、demo.cc
下例为C++为后端服务编写的探活检测服务
health_server.h
#ifndef HEALTH_SERVER_H
#define HEALTH_SERVER_H
#include <iostream>
//#include "utils/flags.h"
void health_server( const std::string &health_host , const std::string &health_port );
#endif
- 必加
#ifndef
: 预处理功能(宏定义,文件包含和条件编译)中的条件编译,主要用来防止重复编译,“multiple define”错误
- .h中的其它预处理功能
include***
,遵循最小使用原则
,如上例 仅使用std::string
,则对应 仅加入#include<iostream>
.cc
文件也需要添加 对应#include "health_server.h"
文件
health_server.cc
#include <dirent.h>
#include <fstream>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include <atomic>
#include <memory>
#include <thread>
#include <iostream>
#include "health_server.h"
#include "./http_server.h"
mg_serve_http_opts oppo::HttpServer::s_server_option;
std::atomic<bool> server_stop(true);
std::unordered_map<std::string, oppo::ReqHandler> oppo::HttpServer::s_handler_map;
std::unordered_set<mg_connection *> oppo::HttpServer::s_websocket_session_set;
static bool HandleHealth(std::string url, std::string body,
mg_connection *c, oppo::OnRspCallback rsp_callback)
{
if (!server_stop)
rsp_callback(c, "OK");
else
rsp_callback(c, "STOP");
return true;
}
static bool HandleStop(std::string url, std::string body,
mg_connection *c, oppo::OnRspCallback rsp_callback)
{
if (!server_stop) {
server_stop = true;
rsp_callback(c, "STOP OK");
}
else {
rsp_callback(c, "IS STOP");
}
return true;
}
static bool HandleStart(std::string url, std::string body,
mg_connection *c, oppo::OnRspCallback rsp_callback)
{
if (server_stop) {
server_stop = false;
rsp_callback(c, "START OK");
}
else {
rsp_callback(c, "IS START");
}
return true;
}
void health_server( const std::string &health_host , const std::string &health_port ){
std::string health_address(health_host + ":" + health_port);
auto health_server = std::unique_ptr<oppo::HttpServer>(new oppo::HttpServer);
std::thread http_thread([&health_server, health_address]() {
health_server->Init(health_address);
health_server->AddHandler("/asr/health", HandleHealth);
health_server->AddHandler("/asr/stop", HandleStop);
health_server->AddHandler("/asr/start", HandleStart);
health_server->Start();
});
http_thread.join();
}
依赖库部分:
gflags
使用DEFINE_int32(port, 10086, "grpc listening port")
#include <memory>
#include <gflags/gflags.h>
DEFINE_int32(port, 10086, "grpc listening port");
atomic
:原子变量,一般在多线程作为锁使用 依赖:#include <atomic>
ERROR
未定义的引用
:- 命令行编写:
g++ speech-service-main.cc http_server.cc mongoose.cc -lpthread
,严格按照依赖顺序写,-l链接动态库 - CMakeList.txt:
add_library(health_server STATIC
http/health_server.cc
http/http_server.cc
http/mongoose.cc
)
target_link_libraries(health_server PUBLIC pthread)
add_executable(grpc_server_main bin/grpc_server_main.cc)
target_link_libraries(grpc_server_main PUBLIC health_server)
最新文章
- 以.net core重构原有.net framework过程中的一些API变更记录(持续更新)
- Halcon 10.0 Sample:完整性检查(圆形)
- Nginx 配置详解
- Struts2的处理结果(一)——处理结果的配置
- PHP PDO 简单登陆操作
- mysql select简单用法
- Android开发:怎样定制界面风格
- Jquery插件之ajaxForm ajaxSubmit的理解用法(转)
- 酷伯伯实时免费HTTP代理ip爬取(端口图片显示+document.write)
- Swift:消除Null值
- Java使用Aspose组件进行多文档间的转换操作
- SUSE12Sp3-kafka安装
- python之cookie, cookiejar 模拟登录绕过验证
- TerminateProcess实现关闭任意程序
- JavaScript基础视频教程总结(091-100章)
- 基于 HTML5 Canvas 的 3D WebGL 机房创建
- 终于解决“Git Windows客户端保存用户名与密码”的问题(转载)
- webuploader.js
- President&#39;s Office
- 贪心算法HURUST题目
热门文章
- 本地使用 Docker Compose 与 Nestjs 快速构建基于 Dapr 的 Redis 发布/订阅分布式应用
- Java中运算符和方法的区别
- day09 集合排序_Collection接口与Collections工具类
- 聊聊 Redis 是如何进行请求处理
- C++封装静态链接库和使用
- 推荐几款最好用的MySQL开源客户端,建议收藏!
- Taurus.MVC WebAPI 入门开发教程6:全局控制器DefaultController与全局事件。
- Flutter 开启 Windows、macOS 平台支持的命令
- JavaScript基础回顾知识点记录1
- Python小游戏——外星人入侵(保姆级教程)第一章 07调整飞船速度 08限制飞船活动范围