- 博客(12)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 C++从入门到精通(非常详细)(上)
当我们定义一个与命名空间冲突的名字时,(与cherno的age同名),C++编译器在这里不认识cherno的age,会调用main函数里的age,(main函数为主入口,编译器都会从该入口进行调用,编译器首先遇见了main中的age,会默认之后的age都是这个)那么有什么办法可以避免这种情况呢?备注:ostream(输出流),istream(输入流),iostream(输入输出流),sstream(字符串流),ifstream(写入文件流),ofstream(写出文件流),fstream(文件流)
2023-11-19 15:48:44
391
原创 C++设计模式(策略模式)
1.所谓策略模式,个人感觉更像是对一种行为表示出不同处理(策略)。比如,你现在想要买一件衣服或者其它,我们可以针对买这个行为做出不同的策略,比如可以去某东买,也可以去某宝买,更甚至可以去线下实体店进行购买,这些都是对买这种行为做出的不同反应。2.如何编码去实现呢?其实策略模式挺容易实现的。
2024-06-18 03:42:18
212
原创 C++工厂设计模式(抽象工厂)
1.工厂设计模式其实就是将某个工厂生产的所有产品归于同一个工厂。比如小米汽车工厂生产小米汽车、小米车灯、小米轮胎等等,奥迪工厂生产奥迪汽车、奥迪车灯、奥迪轮胎等等,奔驰工厂生产奔驰汽车、奔驰车灯、奔驰轮胎等等,其实这就是C++中的工厂设计模式。2.怎么去编码实现?对于客户来说,买了哪家的汽车产品,就用哪家产品的功能,并且所有产品以及产品质量保证以及售后等等,都由指定的工厂跟踪负责,C++工厂设计同样如此。代码实现:通过基类与纯虚函数,在其子类中进行对车一系列功能的重写。
2024-06-18 03:20:06
389
原创 Linux C++条件变量(std::condition_variable)
灵活的锁(std::unique_lock)与普通的锁(std::lock_guard)相比更加灵活,更适用于条件变量。(在条件不满足时是解锁状态即资源释放,条件满足时,进行上锁,获取资源,在线程任务完成之前进行解锁,释放资源。2.两个通知函数notify_one和notify_all。1.std::condition_variable类。目的:主要是实现代码的同步操作。为什么使用灵活的锁?
2024-06-02 22:14:37
382
原创 QT实现高并发多线程处理多个Socket客户端
实现多线程方法有两种,分别是继承QObject或者继承QThread。本文使用继承QObject,并使用moveToThread将客户端Socket移动到线程中执行。主要是为了使得每个客户端进来后,分配一个线程进行处理。4. 具体代码结构如下图。
2024-06-01 19:06:00
392
原创 Linux C++ Json文件解析详解
结论:上述代码成功编译,并生成了我们期望看到的custom.json文件。Jsoncpp文件已经在github上开源。2.配置生成静态库libjsoncpp.a。1.Linux Jsoncpp配置。3.Json文件解析。4.Json文件写入。
2024-05-30 22:21:53
390
原创 QT实现互亿无线短信验证
最近在开发软件过程中,需要短信验证。所以使用了第三方短信供应商(互亿无线)。2. tencentCloudSmsVerification.cpp实现。1.tencentCloudSmsVerification.h实现。以下使用TCP Soket 编程实现HTTP POST。
2024-04-25 21:13:03
213
2
原创 网络层(IP协议)
路由聚合的目的主要是解决路由表的坑余。,聚合的理论是因为无论聚合前还是聚合后的网络地址是相同的。主机与路由器都保存一张路由控制表,标明了IP地址、目标地址子网掩码、接口、下一个路由器IP地址等,通过目标地址在路由控制表中查询段记录,通过段记录将IP数据包转发到下一个路由,通过如此的循环,最终完成发往至目标地址的任务。实际在IP数据包转发过程中,我们并不是将IP数据包发送到具体的主机,而是发送到相同网络地址的“所有设备”。默认路由为0.0.0.0/0,默认路由表示所有的网络以及子网的信息。
2024-04-25 20:33:30
383
1
原创 浅谈互斥锁(std::mutex)
另外top()与pop()之间也存在竞争:新线程在top()与pop()之间进行top()操作,假设栈中有两个及以上的数据时,好像并没有太大的异常,我们仔细设想一下,其实出栈的元素可能是同一个,而这种错误,代码编译后并不会被发现。所谓互斥锁,实质上就是指当某一个线程拥有锁(即资源),在执行其线程任务时,其它的线程只能等待,只有当上一个线程完成自己的任务并且释放锁的资源后,其它的线程才能进行重新上锁(即获取资源),完成自己的任务。条件竞争一般是指两个及两个以上线程共享数据内存,并抢着完成各自的任务。
2024-04-24 11:52:10
658
原创 如何进行线程管理
使用标识,去标识线程可能是为了区别线程,假设一个线程执行的同时,另外一个相同的线程也来执行,那么这边造成一定的时间开销与空间开销,所以标识线程主要是为了区别线程,防止同一个线程被执行两次。总而言之,标识线程主要是。而释放资源往往是我们程序员往往忽视的环节,在前期C++学习中,我们熟知,智能指针也是自动进行资源回收的对象,其实了解过智能指针的小伙伴都知道,其实销毁智能指针的操作,就是在析构函数中实现的,其实这也就是C++之父提出的RAII机制,它是充分利用了局部对象自动销毁的特性来控制资源的生命周期的。
2024-04-20 19:03:59
1709
原创 Hello,并发与并行世界!
共享资源中,有部分资源在一定时间内只能由一个进程享有,例如一个男卫生间,现约定只能由一个工人占有,当该工人占有后,其余工人不能占用该卫生间,只能等待上一个工人使用完该卫生间后才能进行享用,那么当上一个工人占用卫生间时,怎样才能保护该卫生间防止被其他人强制享用呢?其实join()函数与detach()函数相对应的,join()函数其实就是主线程等待新线程结束,而不是不等待新的线程结束,它就将自顾自地运行到main()结束。C++11以后,为我们提供了线程库std::thread,并提供一系列的线程模版。
2024-04-20 17:55:20
817
2
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人