![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
文章平均质量分 75
bing激凌~
一个程序员
展开
-
C++内存模型介绍
C++内存模型介绍。原创 2022-10-18 23:30:08 · 479 阅读 · 1 评论 -
C++ defer函数实现
类似go语言里的defer实现,有几个注意点:使用析构函数实现,后面的defer会优先调用; defer是引用传递,defer内修改值,也会影响外面。#include <stdio.h>#include <stdlib.h>#include <iostream>#include <functional>using namespace std;class DeferHelper{public: DeferHelper(std::原创 2021-07-26 12:58:14 · 1210 阅读 · 0 评论 -
nginx时间更新机制(ngx_timer_resolution)
nginx worker进程就是在处理网络事件、定时器事件和信号,核心是处理网络事件和定时器事件。下面看一下 worker进程是如何精确处理这些核心事件的。1、worker进程启动在 worker进程处理函数中,首先进行 worker进程运行相关的配置初始化设置操作,然后进入无限循环,处理 worker进程关注的信号和定时器事件以及核心的网络事件。下面是相关代码:static ...原创 2019-08-11 16:39:04 · 2293 阅读 · 0 评论 -
nginx升级版本导致的CLOSE_WAIT异常
背景:在 nginx上添加 http模块(C++),添加的 http模块调用配置文件中配置好的动态库程序(C++),动态库程序实现业务代码。最近需要用到 nginx比较高版本的镜像流量的功能,但是我们线上 nginx版本比较低,所以需要进行 nginx版本升级。问题:升级 nginx版本后(1.8 -> 1.16),上游请求 nginx服务会随机超时,在 nginx服务机器...原创 2019-08-19 22:01:51 · 4009 阅读 · 0 评论 -
nginx worker启动初始化分析
1、master进程初始化:nginx是 master-worker多进程模型,程序启动时首先启动 master进程,由 master进程根据配置启动 worker进程,在 master函数中处理代码如下:void ngx_master_process_cycle(ngx_cycle_t *cycle) { // .. ccf = (ngx_core_conf_t *) ...原创 2019-08-09 23:24:52 · 514 阅读 · 0 评论 -
nginx启动分析-ngx_master_process_cycle
nginx在开启master-worker工作模式时,会调用ngx_master_process_cycle函数进行master、worker进程的相关初始化操作,然后会进入一个无限循环处理nginx感兴趣的相关信号,主要是用来管理worker进程相关。下面看一下函数的初始化相关代码,代码主要设置nginx需要监听的信号,设置master进程名称,根据配置初始化指定数量的worker进程...原创 2019-08-04 22:09:02 · 708 阅读 · 0 评论 -
Rabbitmq C++客户端(基于rabbitmq-c)
最近项目使用了rabbitmq消息队列,需要基于rabbitmq-c(https://github.com/alanxz/rabbitmq-c)进行一层封装,然后根据官方自带示例以及网上代码整理了一下。 发送者需要声明exchange,并指定routekey进行数据发送;消费者需要声明一个Queue并绑定exchange和routekey,进行数据接收。RabbitmqClient头...原创 2018-07-04 17:31:30 · 25996 阅读 · 23 评论 -
Linux多网卡拉同一组播导致数据异常
最近在做项目的时候遇到了这么一个问题,就是在使用 多网卡的 Linux主机拉组播数据的时候,如果两块网卡在一个局域网中,并且拉同一个组播流,那么就会出现问题,问题的现象是 每个网卡都可以收到组播流,但是收到的组播流数据是双倍的。最终问了曾经遇到过这个问题的同事后,发现只是在创建 socket的地方绑定一个网卡就可以了,需要使用 SO_BINDTODEVICE来绑定网卡,需要的参原创 2017-08-02 18:49:02 · 1282 阅读 · 0 评论 -
live555Server读取文件修改为socket接收数据遇到的问题
最近在修改 live555Server端的代码,基本需求是这样的,live555Server有从文件读取音视频数据作为 Server的 Demo。我们需要改为 从网络中接收音视频数据作为 Server的数据输入。最终是一个程序从网络中接收音视频数据,然后建立 Unix socket套接字服务,等待有客户端连接 live555Server的时候,live555Server首先创建套接字连接我们程序刚原创 2017-07-21 17:08:58 · 1037 阅读 · 0 评论 -
iocnv Linux字符编码转换函数 坑
最近写项目的时候,需要进行编码格式的转换(GB2312转换为utf-8),于是使用到了 iconv这个函数,是一个 Linux下的转码库函数。这个函数的参数列表是这样的:size_t iconv(iconv_t cd, char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft); 第二个和第四个原创 2017-04-08 12:22:12 · 760 阅读 · 0 评论 -
俄罗斯方块的 C++实现
最近想写一个俄罗斯方块,正好电脑里面有个以前下的代码,于是就看了看思路,然后自己加了一些东西,要是忘了就不好了先做7个不同类型的方块,分别为 长条形、方形、L形、反L形、Z形、反Z形、土字形。用一个二维数组保存每个形状,每个形状使用4个点,每个点代表每种形状的一个小方格,比如:{ 0, 0, 0, 1, 0, 2, 0, 3, FOREGROUND_RED | FOREGROUND_I原创 2015-04-21 10:49:22 · 27068 阅读 · 8 评论 -
C++设计模式 代理模式
最近在看《大话设计模式》这本书,看到了代理模式这一章,正好有时间,简单的写一下自己的理解。代理模式就是其实就是对 真实的实体做了一层封装,客户端调用的时候 直接访问代理类,代理类再根据实际情况去操作真实的实体。在操作实体之前,代理类可以做一些判定或者其他的操作,这就是代理类存在的意义。一般代理类中都会保存一个 实体类的对象的引用或者指针。代理类和实体类具有相同的接口,一般情况下他们继承自一原创 2016-12-16 21:45:22 · 602 阅读 · 0 评论 -
音视频CC计数检查
在网络中收取视频数据的时候,可以通过检查 CC来判断网络中是否存在丢包问题,CC字段是在 TS头中的一个计数值,正常情况下它是从0到15的连续值(到达16后变为0)。编码思路:首先记录第一次的 CC值,然后再收到数据包的时候和上次保存的 CC值进行对比,如果差1说明网络中没有丢包。有以下几种情况 CC计数是可以不连续的:1.调整字段的值为 00或者 10的时候,说明这个数据原创 2016-12-06 19:47:38 · 623 阅读 · 0 评论 -
aplay:control open (0): Invalid argument
Linux下 Alsa编程遇到了一些错误,第一个就是在给 Linux安装 编程库时出现的 使用命令查看声卡 arecord -l,出现的 aplay: device_list:277: control open (0): Invalid argument错误,在网上查找了方法之后,发现能解决这个问题的就是:1.使用 命令aplay --version查看当前 alsa版本号,我的是 1.0.2原创 2016-08-28 09:35:17 · 1622 阅读 · 0 评论 -
DirectX的error LNK2019: 无法解析的外部符号 _Direct3DCreate9@4,该符号在函数 "long __cdecl InitD3D(struct HWND__ *)"
在VS下弄了半天这个,总是出错误,解决方法就是 首先把安装的DirectX的 头文件和 库包含进来,要包含 win32 x86的,最后在 项目->配置属性->链接器->输入->附加依赖项 中加入 d3d9.lib,就可以正常编译了。原创 2016-01-22 13:44:58 · 3657 阅读 · 0 评论