<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[YanWenCheng_的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/YanWenCheng_</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; YanWenCheng_]]></copyright><item><title><![CDATA[RTMP协议解析]]></title><link>https://blog.youkuaiyun.com/YanWenCheng_/article/details/126483427</link><guid>https://blog.youkuaiyun.com/YanWenCheng_/article/details/126483427</guid><author>YanWenCheng_</author><pubDate>Tue, 23 Aug 2022 13:56:01 +0800</pubDate><description><![CDATA[流媒体协议解析]]></description><category></category></item><item><title><![CDATA[C++虚函数表深度剖析]]></title><link>https://blog.youkuaiyun.com/YanWenCheng_/article/details/125861735</link><guid>https://blog.youkuaiyun.com/YanWenCheng_/article/details/125861735</guid><author>YanWenCheng_</author><pubDate>Mon, 18 Jul 2022 23:20:13 +0800</pubDate><description><![CDATA[C++基础]]></description><category></category></item><item><title><![CDATA[muduo源码剖析 - Poller]]></title><link>https://blog.youkuaiyun.com/YanWenCheng_/article/details/125808073</link><guid>https://blog.youkuaiyun.com/YanWenCheng_/article/details/125808073</guid><author>YanWenCheng_</author><pubDate>Fri, 15 Jul 2022 17:58:21 +0800</pubDate><description><![CDATA[muduo源码剖析]]></description><category></category></item><item><title><![CDATA[muduo源码剖析 - Buffer]]></title><link>https://blog.youkuaiyun.com/YanWenCheng_/article/details/125802486</link><guid>https://blog.youkuaiyun.com/YanWenCheng_/article/details/125802486</guid><author>YanWenCheng_</author><pubDate>Fri, 15 Jul 2022 13:52:23 +0800</pubDate><description><![CDATA[muduo源码剖析]]></description><category></category></item><item><title><![CDATA[muduo源码剖析 - TcpServer]]></title><link>https://blog.youkuaiyun.com/YanWenCheng_/article/details/125799794</link><guid>https://blog.youkuaiyun.com/YanWenCheng_/article/details/125799794</guid><author>YanWenCheng_</author><pubDate>Fri, 15 Jul 2022 11:13:40 +0800</pubDate><description><![CDATA[muduo源码剖析]]></description><category></category></item><item><title><![CDATA[muduo源码剖析 - TcpConnection]]></title><link>https://blog.youkuaiyun.com/YanWenCheng_/article/details/125792215</link><guid>https://blog.youkuaiyun.com/YanWenCheng_/article/details/125792215</guid><author>YanWenCheng_</author><pubDate>Thu, 14 Jul 2022 22:05:29 +0800</pubDate><description><![CDATA[muduo源码剖析]]></description><category></category></item><item><title><![CDATA[muduo源码剖析 - Acceptor]]></title><link>https://blog.youkuaiyun.com/YanWenCheng_/article/details/125778343</link><guid>https://blog.youkuaiyun.com/YanWenCheng_/article/details/125778343</guid><author>YanWenCheng_</author><pubDate>Thu, 14 Jul 2022 12:58:27 +0800</pubDate><description><![CDATA[muduo源码剖析]]></description><category></category></item><item><title><![CDATA[muduo源码剖析 - EventLoopThreadPool]]></title><link>https://blog.youkuaiyun.com/YanWenCheng_/article/details/125771233</link><guid>https://blog.youkuaiyun.com/YanWenCheng_/article/details/125771233</guid><author>YanWenCheng_</author><pubDate>Wed, 13 Jul 2022 19:53:43 +0800</pubDate><description><![CDATA[muduo 源码剖析]]></description><category></category></item><item><title><![CDATA[muduo源码剖析 - EventLoopThread]]></title><link>https://blog.youkuaiyun.com/YanWenCheng_/article/details/125761761</link><guid>https://blog.youkuaiyun.com/YanWenCheng_/article/details/125761761</guid><author>YanWenCheng_</author><pubDate>Wed, 13 Jul 2022 13:31:52 +0800</pubDate><description><![CDATA[mudo源码剖析]]></description><category></category></item><item><title><![CDATA[muduo源码剖析 - Channel]]></title><link>https://blog.youkuaiyun.com/YanWenCheng_/article/details/125760139</link><guid>https://blog.youkuaiyun.com/YanWenCheng_/article/details/125760139</guid><author>YanWenCheng_</author><pubDate>Wed, 13 Jul 2022 11:43:48 +0800</pubDate><description><![CDATA[muduo源码剖析]]></description><category></category></item><item><title><![CDATA[muduo源码剖析 - EventLoop]]></title><link>https://blog.youkuaiyun.com/YanWenCheng_/article/details/125653961</link><guid>https://blog.youkuaiyun.com/YanWenCheng_/article/details/125653961</guid><author>YanWenCheng_</author><pubDate>Thu, 07 Jul 2022 12:03:30 +0800</pubDate><description><![CDATA[muduo源码剖析]]></description><category></category></item><item><title><![CDATA[muduo源码剖析 - worker线程池剖析]]></title><link>https://blog.youkuaiyun.com/YanWenCheng_/article/details/124437582</link><guid>https://blog.youkuaiyun.com/YanWenCheng_/article/details/124437582</guid><author>YanWenCheng_</author><pubDate>Mon, 23 May 2022 11:15:34 +0800</pubDate><description><![CDATA[1、ThreadPool的成员变量：


  /*
      我们知道，如果类的成员函数不会改变对象的状态，那么这个成员函数一般会声明成const的。
      但是，有些时候，我们需要在const的函数里面修改一些跟类状态无关的数据成员，那么这个数据成员就应该被mutalbe来修饰。
  */
  mutable MutexLock mutex_;
  Condition notEmpty_ GUARDED_BY(mutex_);  //GUARDED_BY, 由...守护
  Condition n]]></description><category></category></item><item><title><![CDATA[Muduo源码剖析]]></title><link>https://blog.youkuaiyun.com/YanWenCheng_/article/details/124372561</link><guid>https://blog.youkuaiyun.com/YanWenCheng_/article/details/124372561</guid><author>YanWenCheng_</author><pubDate>Sat, 23 Apr 2022 23:16:57 +0800</pubDate><description><![CDATA[muduo源码剖析]]></description><category></category></item><item><title><![CDATA[C++ emplace_back]]></title><link>https://blog.youkuaiyun.com/YanWenCheng_/article/details/121336577</link><guid>https://blog.youkuaiyun.com/YanWenCheng_/article/details/121336577</guid><author>YanWenCheng_</author><pubDate>Mon, 15 Nov 2021 16:07:12 +0800</pubDate><description><![CDATA[概述

在C++11中，在引入右值的升级后，调用push_back变的更为高效，原本需要调用构造函数构造这个临时对象，然后调用拷贝构造函数将这个临时对象放入容器中。在C++11升级后，只需要调用构造函数，然后调用移动拷贝函数。

就好比，现在手里有个面包，要把这个放到面包袋子里，原来的逻辑是，生产一个面包，然后在面包袋子里根据生产的面包再复制一个一摸一样的，在引入右值引用升级之后，现在的push_back的逻辑是，生产一个面包，然后把这个面包挪到袋子里（也就是移动拷贝）而不是再照着这个面包复制一个新的。

]]></description><category></category></item><item><title><![CDATA[std::enable_shared_from_this使用场景]]></title><link>https://blog.youkuaiyun.com/YanWenCheng_/article/details/121075653</link><guid>https://blog.youkuaiyun.com/YanWenCheng_/article/details/121075653</guid><author>YanWenCheng_</author><pubDate>Mon, 01 Nov 2021 10:39:33 +0800</pubDate><description><![CDATA[在很多场合，经常会遇到一种情况，如何安全的获取对象的this指针，一般来说我们不建议直接返回this指针，可以想象下有这么一种情况，返回的this指针保存在外部一个局部/全局变量，当对象已经被析构了，但是外部变量并不知道指针指向的对象已经被析构了，如果此时外部使用了这个指针就会发生程序奔溃。既要像指针操作对象一样，又能安全的析构对象，很自然就想到，智能指针就很合适！

那么智能指针如何使用呢？现在我们来看一段代码。


#include &lt;iostream&gt;
#include &lt;memor]]></description><category></category></item><item><title><![CDATA[负载均衡解析]]></title><link>https://blog.youkuaiyun.com/YanWenCheng_/article/details/120597542</link><guid>https://blog.youkuaiyun.com/YanWenCheng_/article/details/120597542</guid><author>YanWenCheng_</author><pubDate>Sun, 03 Oct 2021 19:32:52 +0800</pubDate><description><![CDATA[你管这破玩意儿叫负载均衡? (qq.com)

20 张图让你彻底掌握负载均衡的秘密！ (qq.com)
]]></description><category></category></item><item><title><![CDATA[Linux环境变量解析]]></title><link>https://blog.youkuaiyun.com/YanWenCheng_/article/details/120543939</link><guid>https://blog.youkuaiyun.com/YanWenCheng_/article/details/120543939</guid><author>YanWenCheng_</author><pubDate>Wed, 29 Sep 2021 10:40:18 +0800</pubDate><description><![CDATA[Linux环境变量配置全攻略 - 悠悠 (uusama.com)
]]></description><category></category></item><item><title><![CDATA[验证当前机器是大端还是小端]]></title><link>https://blog.youkuaiyun.com/YanWenCheng_/article/details/120505667</link><guid>https://blog.youkuaiyun.com/YanWenCheng_/article/details/120505667</guid><author>YanWenCheng_</author><pubDate>Mon, 27 Sep 2021 11:48:56 +0800</pubDate><description><![CDATA[方法一



    int data = 0x12345678;
    char *cp = (char*)&amp;data; //取4字节中的低地址字节
    if(*cp == 0x78)
        cout &lt;&lt; "little" &lt;&lt; endl;
    if(*cp == 0x12)
        cout &lt;&lt; "big" &lt;&lt; endl;


]]></description><category></category></item><item><title><![CDATA[QT客户端框架（http + websocket+QML）]]></title><link>https://blog.youkuaiyun.com/YanWenCheng_/article/details/120261604</link><guid>https://blog.youkuaiyun.com/YanWenCheng_/article/details/120261604</guid><author>YanWenCheng_</author><pubDate>Mon, 13 Sep 2021 10:37:29 +0800</pubDate><description><![CDATA[本框架是在个人在做项目中总结出来的一套Qt客户端框架，基于http调用接口和websocket接收服务器通知，前端使用qml。 其中业务请求逻辑使用的是C++逻辑。为了后期方便使用，特此记录下来方便以后客户端的搭建。

框架简介：

1.本框架采用Qml写前端页面，页面逻辑使用JS， 请求接收逻辑采用C++。

2.事件中转单例，qml和C++可同时开发，通过事件中转隔离前端和逻辑。

3. 基本配置文件类和全局变量类和调试类使得开发业务更加方便。

4.C++多线程部分亲测没问题。业务请求和接收全部在自己]]></description><category></category></item><item><title><![CDATA[智能指针详解]]></title><link>https://blog.youkuaiyun.com/YanWenCheng_/article/details/120211148</link><guid>https://blog.youkuaiyun.com/YanWenCheng_/article/details/120211148</guid><author>YanWenCheng_</author><pubDate>Thu, 09 Sep 2021 22:13:28 +0800</pubDate><description><![CDATA[一、简介

由于 C++ 语言没有自动内存回收机制，程序员每次 new 出来的内存都要手动 delete。程序员忘记 delete，流程太复杂，最终导致没有 delete，异常导致程序过早退出，没有执行 delete 的情况并不罕见。

用智能指针便可以有效缓解这类问题，本文主要讲解参见的智能指针的用法。包括：std::auto_ptr、boost::scoped_ptr、boost::shared_ptr、boost::scoped_array、boost::shared_array、boost::wea]]></description><category></category></item></channel></rss>