Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1239630
  • 博文数量: 76
  • 博客积分: 1959
  • 博客等级: 上尉
  • 技术积分: 2689
  • 用 户 组: 普通用户
  • 注册时间: 2007-11-19 12:07
个人简介

樽中酒不空

文章分类

全部博文(76)

文章存档

2020年(4)

2019年(1)

2017年(2)

2016年(2)

2015年(7)

2014年(11)

2013年(13)

2012年(18)

2011年(2)

2010年(16)

分类: C/C++

2020-08-05 18:46:41

先来一段伪代码:

点击(此处)折叠或打开

  1. class App
  2. {
  3.   void run() //业务处理函数
  4.     {
  5.      while(1)//接收到特殊指令后再退出循环
  6.      {...}
  7.    }
  8. };

  9. int main()
  10. {
  11. LOG(INFO)<<"start up"; //日志输出
  12. App app;
  13. LOG(INFO)<<"app run";
  14. app.run();             //业务处理
  15. LOG(INFO)<<"app exit";
  16. return 0;
  17. };
第一行,定义一个class,里面的run()函数内部维护着一个循环,可以用线程,或者定时器,或者中断用来接收外界信息。
第10行是C++程序的入口。
再看主程序,多次用到了LOG,这里没有明确定义,假设我们使用的是glog,用来输出日志。
然后调用app.run(),进行业务处理。
当run()退出的时候,整个程序结束,return 0通知系统。
这个就是最简单的C++工程框架了。想要实现什么功能,就在App的run()函数里实现。
这个程序和一般教科书上的Hello World不一样。还是最开始强调的,本文讲的是如果使用C++实现一个工程,就要按工程的标准来。本文先简单总结一下:1 main主程序启动后,不做具体工作,这些业务交给相关的业务class去实现。2 一定要有详尽的日志,越细越好。3 注释可有可无,但关键部分一定要加。本文是伪代码,不加也看的懂,只是个演示。
=====================================

还是放上一个可编译的代码吧,cu的文件上传很不方便,代码放在github上:。
本章的内容在:


代码很简单,有一点经验就能看懂。考虑可能还有初学者,这里简单再讲解一下:


点击(此处)折叠或打开

  1. #include <iostream>// stl cout
  2. #include <signal.h>//signal头文件
  3. #include <chrono> //stl chrono头文件,时间工具,可以精确到,可以精确到纳秒
  4. #include <thread> //stl thread

  5. static int signaled = 0;
  6. static void sigterm_handler(int sig)
  7. {
  8.     signaled = 1;
  9. }

  10. class App
  11. {
  12. public:
  13.     void run()
  14.     {
  15.         //std::chrono::milliseconds可以是以下四个中的一个:seconds,milliseconds,microseconds,nanoseconds
  16.         uint64_t start_millseconds = std::chrono::duration_cast<std::chrono::milliseconds>
  17.             (std::chrono::system_clock::now().time_since_epoch()).count();
  18.         for (;;)
  19.         {
  20.             if (signaled == 1)
  21.                 break;
  22.             else
  23.             {
  24.                 std::cout << "运行毫秒数:" << std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()).count()- start_millseconds << std::endl;
  25.                 std::this_thread::sleep_for(std::chrono::seconds(1));;
  26.             }
  27.         }
  28.     };
  29. };


  30. int main()
  31. {
  32.     std::cout << "Hello World!\n";
  33.     signal(SIGINT, sigterm_handler); //ctrl + c中断


  34.     App app;
  35.     app.run();
  36.     std::cout << "Exit!\n";
  37.     std::this_thread::sleep_for(std::chrono::seconds(1));
  38. }
这段代码的作用是启动一个进程,然后一直循环,每隔一秒在屏幕上输出自启动开始的毫秒数。
在键盘上按ctrl+c时,屏幕上显示"Exit",然后一秒后正常退出进程。
程序启动退出和运行过程中有日志输出。
可以认为这是一个完整的C++程序框架,想要实现具体业务,就在App的run函数内处理。
代码里唯一有点陌生的是signal函数,监听系统中断事件。自行搜索一下就了解了。
本讲需要补充的地方:
1 程序运行中需要把日志保存到文件中
2 程序启动需要读配置文件
下一讲,先介绍一下glog的日志功能。
然后再讲一下json读写配置文件。






阅读(1535) | 评论(0) | 转发(0) |
0

上一篇:C++工程

下一篇:C++工程 1.2 使用glog写日志

给主人留下些什么吧!~~