<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[weixin_42636062的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/weixin_42636062</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; weixin_42636062]]></copyright><item><title><![CDATA[1、typeid]]></title><link>https://blog.youkuaiyun.com/weixin_42636062/article/details/127234891</link><guid>https://blog.youkuaiyun.com/weixin_42636062/article/details/127234891</guid><author>weixin_42636062</author><pubDate>Sun, 09 Oct 2022 21:49:59 +0800</pubDate><description><![CDATA[cpp中获取类型名]]></description><category></category></item><item><title><![CDATA[lambda表达式]]></title><link>https://blog.youkuaiyun.com/weixin_42636062/article/details/126853538</link><guid>https://blog.youkuaiyun.com/weixin_42636062/article/details/126853538</guid><author>weixin_42636062</author><pubDate>Wed, 14 Sep 2022 15:34:40 +0800</pubDate><description><![CDATA[C++中lambda表达式]]></description><category></category></item><item><title><![CDATA[Qt第四天]]></title><link>https://blog.youkuaiyun.com/weixin_42636062/article/details/122285758</link><guid>https://blog.youkuaiyun.com/weixin_42636062/article/details/122285758</guid><author>weixin_42636062</author><pubDate>Mon, 03 Jan 2022 11:59:52 +0800</pubDate><description><![CDATA[一个理解：
什么是头文件？
引入后，可以通过创建类对象，来使用功能
例如
#include &lt;QTimer&gt;

QTimer * timer = new

一、QT中的socket通信
Qt中提供的所有的Socket类都是非阻塞的。
Qt中常用的用于socket通信的套接字类:

QTcpServer

用于TCP/IP通信, 作为服务器端套接字使用


QTcpSocket

用于TCP/IP通信，作为客户端套接字使用。


QUdpSocket

用于UDP通信，服务器，客户端均使用此套接字]]></description><category></category></item><item><title><![CDATA[QT第三天]]></title><link>https://blog.youkuaiyun.com/weixin_42636062/article/details/122115187</link><guid>https://blog.youkuaiyun.com/weixin_42636062/article/details/122115187</guid><author>weixin_42636062</author><pubDate>Thu, 23 Dec 2021 20:03:15 +0800</pubDate><description><![CDATA[一、自定义控件
1.1 自己做一个组件步骤
在创建的好的项目里==添加一个Qt 设计师界面类==

选择Widget

起一个类名

在smallwidget.ui中加入一个widget，右键，提升为

输入类名称（注意与创建的类名一致），勾上全局包含（为了再次添加方便），然后点击添加，再点击提升

运行

1.2 代码看帮助加书写详解
在smallwidget.cpp中输入代码：
先理清楚两个类的信号和槽
左边是拖动ui里面的Spin Box ，类名叫QSpinBox
右边是拖动ui里面的Horizont]]></description><category></category></item><item><title><![CDATA[QT第二天]]></title><link>https://blog.youkuaiyun.com/weixin_42636062/article/details/121962160</link><guid>https://blog.youkuaiyun.com/weixin_42636062/article/details/121962160</guid><author>weixin_42636062</author><pubDate>Wed, 15 Dec 2021 21:34:01 +0800</pubDate><description><![CDATA[一、QMainWindow
QMainWindow是一个为用户提供主窗口程序的类，包含一个菜单栏（menu bar）、多个工具栏(tool bars)、多个锚接部件(dock widgets 又称为浮动窗口)、一个状态栏(status bar)及一个中心部件(central widget)，是许多应用程序的基础，如文本编辑器，图片编辑器等。

菜单栏最多只能有一个，工具栏可以有多个
状态栏最多只能有一个，铆接部件（浮动窗口）可以有多个
！！！可以有多个的有add，只能有一个的只有set！！！
1.1 菜单栏]]></description><category></category></item><item><title><![CDATA[QT第一天]]></title><link>https://blog.youkuaiyun.com/weixin_42636062/article/details/121665183</link><guid>https://blog.youkuaiyun.com/weixin_42636062/article/details/121665183</guid><author>weixin_42636062</author><pubDate>Wed, 01 Dec 2021 21:28:54 +0800</pubDate><description><![CDATA[一、介绍
1.1 介绍
QT是一套应用程序开发库，但与MFC不同，QT是跨平台的开发类库。
跨平台意味着只需要编写一次程序，在不同平台无需改动或只需少许改动编译，就可以形成在不同平台上运行的版本。
1.2 优点

跨平台
接口简单，容易上手
一定程度上简化了内存回收

二、注意事项
2.1名称跟创建的路径不能含中文！！！
2.2如果不编译，会显示红色

2.3 默认创建有窗口类myWidget，基类有三种选择：QWidget（类似于空窗口），QMainWindow以及QDialog三个
QWidget 是所]]></description><category></category></item><item><title><![CDATA[使用VScode连接远程服务器的配置方法]]></title><link>https://blog.youkuaiyun.com/weixin_42636062/article/details/120629073</link><guid>https://blog.youkuaiyun.com/weixin_42636062/article/details/120629073</guid><author>weixin_42636062</author><pubDate>Wed, 06 Oct 2021 20:24:15 +0800</pubDate><description><![CDATA[VScode简介
由微软推出的一款轻量级编辑器，拥有大量可拓展插件，可以根据自己的需求添加插件使编辑器的功能丰富起来。VScode和Sublime Text应该是最受欢迎的两款编辑器，本文将介绍在Windows下如何使用VScode连接远程linux服务器进行开发。
为什么用VScode
连接远程服务器的方法有很多，比如可以借助XShell、putty等软件使用ssh命令来登录远程服务器。但如果使用这种连接方法在远程服务器上进行开发工作，会来带诸多不便，比如：

全程只能在终端使用指令操作，文件操作麻烦。
]]></description><category></category></item><item><title><![CDATA[14.C++线程池]]></title><link>https://blog.youkuaiyun.com/weixin_42636062/article/details/120255761</link><guid>https://blog.youkuaiyun.com/weixin_42636062/article/details/120255761</guid><author>weixin_42636062</author><pubDate>Sun, 12 Sep 2021 20:49:09 +0800</pubDate><description><![CDATA[一、线程池原理
​		我们使用线程的时候就去创建一个线程，这样实现起来非常简便，但是就会有一个问题：如果并发的线程数量很多，并且每个线程都是执行一个时间很短的任务就结束了，这样==频繁创建线程就会大大降低系统的效率，因为频繁创建线程和销毁线程需要时间。==
​		那么有没有一种办法使得线程可以复用，就是执行完一个任务，并不被销毁，而是可以继续执行其他的任务呢？
​		线程池是一种多线程处理形式，处理过程中将任务添加到队列，然后在创建线程后自动启动这些任务。线程池线程都是后台线程。每个线程都使用默认的堆栈大小]]></description><category></category></item><item><title><![CDATA[13.补充知识、线程池浅谈、数量谈、总结]]></title><link>https://blog.youkuaiyun.com/weixin_42636062/article/details/120252416</link><guid>https://blog.youkuaiyun.com/weixin_42636062/article/details/120252416</guid><author>weixin_42636062</author><pubDate>Sun, 12 Sep 2021 16:41:44 +0800</pubDate><description><![CDATA[目录

一、补充一些知识点
1.1 虚假唤醒：
notify_one或者notify_all唤醒wait()后，实际有些线程可能不满足唤醒的条件，就会造成虚假唤醒，可以在wait中再次进行判断解决虚假唤醒。
解决：wait中要有第二个参数（lambda），并且这个lambda中要正确判断所处理的公共数据是否存在。
1.2 atomic：
（1）这里只有读取atm是原子操作，但是整个这一行代码 cout &lt;&lt; atm &lt;&lt; endl; 并不是原子操作，导致最终显示在屏幕上的值是一个“曾]]></description><category></category></item><item><title><![CDATA[12.windows临界区、其他各种mutex互斥量]]></title><link>https://blog.youkuaiyun.com/weixin_42636062/article/details/120252279</link><guid>https://blog.youkuaiyun.com/weixin_42636062/article/details/120252279</guid><author>weixin_42636062</author><pubDate>Sun, 12 Sep 2021 16:32:11 +0800</pubDate><description><![CDATA[目录

一、windows临界区
Windows临界区与互斥量用法非常相似；但也有些差别
在“同一个线程”(不同线程中会卡住等待)中， Windows中的“相同临界区变量”代表的临界区的进入(EnterCriticalSection)可以被多次调用，但是调用了几次EnterCriticalSection(),就得调用几次EnterCriticalSection()
而在C++11中，std::mutex不允许同一个线程中lock同一个互斥量多次，否则报异常；
多线程 互斥量与Windows临界区对比代码如下]]></description><category></category></item><item><title><![CDATA[11.atomic续谈、async深入谈]]></title><link>https://blog.youkuaiyun.com/weixin_42636062/article/details/120251207</link><guid>https://blog.youkuaiyun.com/weixin_42636062/article/details/120251207</guid><author>weixin_42636062</author><pubDate>Sun, 12 Sep 2021 15:30:37 +0800</pubDate><description><![CDATA[目录

一、原子操作std::atomic续谈
#include &lt;iostream&gt;
#include &lt;thread&gt;
#include &lt;atomic&gt;
using namespace std;
std::atomic&lt;int&gt; g_count = 0; //封装了一个类型为int的 对象（值）
 
void mythread1() {
	for (int i = 0; i &lt; 1000000; i++) {
		 //虽然g_count使用了原子]]></description><category></category></item><item><title><![CDATA[10.future其他成员函数、shared_future、atomic]]></title><link>https://blog.youkuaiyun.com/weixin_42636062/article/details/120250729</link><guid>https://blog.youkuaiyun.com/weixin_42636062/article/details/120250729</guid><author>weixin_42636062</author><pubDate>Sun, 12 Sep 2021 15:00:29 +0800</pubDate><description><![CDATA[目录

一、std::future 的成员函数
std::future_status status = result.wait_for(std::chrono::seconds(几秒));
卡住当前流程，等待std::async()的异步任务运行一段时间，然后返回其状态std::future_status。如果std::async()的参数是std::launch::deferred（延迟执行），则不会卡住主流程。
std::future_status是枚举类型，表示异步任务的执行状态。类型的取值有
std]]></description><category></category></item><item><title><![CDATA[9.async、future、packaged_task、promise]]></title><link>https://blog.youkuaiyun.com/weixin_42636062/article/details/120243603</link><guid>https://blog.youkuaiyun.com/weixin_42636062/article/details/120243603</guid><author>weixin_42636062</author><pubDate>Sat, 11 Sep 2021 21:32:51 +0800</pubDate><description><![CDATA[目录

一、std::async、std::future创建后台任务并返回值

1.目的    ：希望线程返回一个结果；
2.头文件：#include &lt;future&gt;
3…用法    ：1.std::future&lt;int&gt; result = std::async(mythread);   //创建一个线程开始执行
​					2.std::future里面的get()等待线程结束并返回结果，wait等					待线程结束但是不返回结果
4.疑问    ：为什么不用join直接代替呢]]></description><category></category></item><item><title><![CDATA[8.condition_variable、wait、notify_one、notify_all]]></title><link>https://blog.youkuaiyun.com/weixin_42636062/article/details/120235902</link><guid>https://blog.youkuaiyun.com/weixin_42636062/article/details/120235902</guid><author>weixin_42636062</author><pubDate>Sat, 11 Sep 2021 12:11:39 +0800</pubDate><description><![CDATA[目录

一、条件变量std::condition_variable、wait()、notify_one()
std:: condition_variable实际上是个类,是一个与条件相关的类，说白了就是等待一个条件的达成。这个类是需要和互斥量来配合工作的，用的时候我们要生成这个类的对象。
实例代码：
线程A：等待一个条件满足
线程B:  专门往消息队列扔消息（数据）
1.1 wait()
wait()用来等一个东西

如果第二个参数是true，那么wait()直接返回
如果第二个参数lambda表达式返回值]]></description><category></category></item><item><title><![CDATA[7.单例设计模式共享数据分析、解决、call_once]]></title><link>https://blog.youkuaiyun.com/weixin_42636062/article/details/120235885</link><guid>https://blog.youkuaiyun.com/weixin_42636062/article/details/120235885</guid><author>weixin_42636062</author><pubDate>Sat, 11 Sep 2021 12:10:31 +0800</pubDate><description><![CDATA[目录

一、设计模式

程序灵活，维护起来可能方便，用设计模式理念写出来的代码很晦涩，但是别人接管、阅读代码都会很痛苦
老外应付特别大的项目时，把项目的开发经验、模块划分经验，总结整理成设计模式
中国零几年设计模式刚开始火时，总喜欢拿一个设计模式往上套，导致一个小小的项目总要加几个设计模式，本末倒置
设计模式有其独特的优点，要活学活用，不要深陷其中，生搬硬套

二、单例设计模式
整个项目中，有某个或者某些特殊的类，只能创建一个属于该类的对象。
单例类：只能生成一个对象。
三、单例设计模式共享数据分析、解决
]]></description><category></category></item><item><title><![CDATA[8.condition_variable、wait、notify_one、notify_all]]></title><link>https://blog.youkuaiyun.com/weixin_42636062/article/details/120235871</link><guid>https://blog.youkuaiyun.com/weixin_42636062/article/details/120235871</guid><author>weixin_42636062</author><pubDate>Sat, 11 Sep 2021 12:08:58 +0800</pubDate><description><![CDATA[目录

一、条件变量std::condition_variable、wait()、notify_one()
std:: condition_variable实际上是个类,是一个与条件相关的类，说白了就是等待一个条件的达成。这个类是需要和互斥量来配合工作的，用的时候我们要生成这个类的对象。
实例代码：
线程A：等待一个条件满足
线程B:  专门往消息队列扔消息（数据）
1.1 wait()
wait()用来等一个东西

如果第二个参数是true，那么wait()直接返回
如果第二个参数lambda表达式返回值]]></description><category></category></item><item><title><![CDATA[6.unique_lock详解]]></title><link>https://blog.youkuaiyun.com/weixin_42636062/article/details/120068338</link><guid>https://blog.youkuaiyun.com/weixin_42636062/article/details/120068338</guid><author>weixin_42636062</author><pubDate>Thu, 02 Sep 2021 19:34:22 +0800</pubDate><description><![CDATA[目录

一、unique_lock取代lock_guard
unique_lock是个类模板，工作中，一般使用lock_guard(推荐使用！)
lock_guard取代了mutex的lock()和unlock();
unique_lock比lock_guard灵活很多，效率上差一点，内存占用多一点。
二、unique_lock的第二个参数
lock_guard可以带第二个参数：
std::lock_guard&lt;std::mutex&gt; sbguard1(my_mutex1, std::adopt]]></description><category></category></item><item><title><![CDATA[C++ 中继承和组合的区别]]></title><link>https://blog.youkuaiyun.com/weixin_42636062/article/details/119992826</link><guid>https://blog.youkuaiyun.com/weixin_42636062/article/details/119992826</guid><author>weixin_42636062</author><pubDate>Mon, 30 Aug 2021 11:18:21 +0800</pubDate><description><![CDATA[应试回答：继承是is-a的关系，组合是has-a的关系

1.继承
继承是面向对象三大基本特征之一(继承，封装，多态)，继承就是子类继承父类的特征和行为，使得子类对象（实例）具有父类的实例域和方法，或子类从父类继承方法，使得子类具有父类相同的行为。
直接通过例子来了解继承：
/*
 * 动物
 */
class Animal{
public:
	virtual void show()=0;
}

/**
 * 飞行动物
 * 继承
 */
class FlyingAnimals : public Anim.]]></description><category></category></item><item><title><![CDATA[5.C++设计模式-行为型模型]]></title><link>https://blog.youkuaiyun.com/weixin_42636062/article/details/119986791</link><guid>https://blog.youkuaiyun.com/weixin_42636062/article/details/119986791</guid><author>weixin_42636062</author><pubDate>Sun, 29 Aug 2021 22:17:34 +0800</pubDate><description><![CDATA[5.C++设计模式-行为型模型
用来对类或对象怎样交互和怎样分配职责进行描述。
5.1 模板方法模式
5.1.1 模板方法的理论

​		定义一个操作中算法的框架，而将一些步骤延迟到子类中。模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
5.1.2 模板方法的案例

#include &lt;iostream&gt;
using namespace std;

class DrinkTemplate {
public:
	//注水
	virtual void Boildwate]]></description><category></category></item><item><title><![CDATA[1.socket网络编程]]></title><link>https://blog.youkuaiyun.com/weixin_42636062/article/details/119970392</link><guid>https://blog.youkuaiyun.com/weixin_42636062/article/details/119970392</guid><author>weixin_42636062</author><pubDate>Sat, 28 Aug 2021 17:12:31 +0800</pubDate><description><![CDATA[socket网络编程总结（Linux+Windows）
理解为：套接字通信，网络通信
1.概念
1.1 局域网和广域网
局域网：局域网将一定区域内的各种计算机、外部设备和数据库连接起来形成计算机通信的私有网络。
广域网：又称广域网、外网、公网。是连接不同地区局域网或城域网计算机通信的远程公共网络。
1.2 IP（Internet Protocol）
本质是一个整形数，用于表示计算机在网络中的地址。IP 协议版本有两个：IPv4 和 IPv6
1.2.1 IPv4（Internet Protocol vers]]></description><category></category></item></channel></rss>