XuQi's Blog

  • 首页

  • 归档

线程池

发表于 2019-06-17 更新于 2019-10-20

c++11 线程池实现以及示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include "ThreadPool.h"
ThreadPool::ThreadPool(size_t threads)
: stop(false)
{
//创建n个线程,每个线程等待是否有新的task, 或者线程stop(要终止)
for (size_t i = 0; i < threads; ++i) {

// 构造并插入vector最后
workers.emplace_back(
[this]
{
for (;;)//轮询
{
std::function<void()> task;
{
//获取同步锁
std::unique_lock<std::mutex> lock(this->queue_mutex);
//线程会一直阻塞,直到有新的task,或者是线程要退出
this->condition.wait(lock,
[this]
{ return this->stop || !this->tasks.empty(); });
//线程退出
if (this->stop && this->tasks.empty())
return;
//将task取出
task = std::move(this->tasks.front());
//队列中移除以及取出的task
this->tasks.pop();
}
//执行task,完了则进入下一次循环
task();
}
}
);
}
}

机器学习之支持向量机(SVM)

发表于 2019-06-12 更新于 2019-10-20

支持向量机(SVM)

支持向量机(support vector machines)是一种二分类模型,它的目的是寻找一个超平面来对样本进行分割,分割的原则是间隔最大化,最终转化为一个凸二次规划问题来求解

  • 当训练样本线性可分时,通过硬间隔最大化,学习一个线性可分支持向量机;

  • 当训练样本近似线性可分时,通过软间隔最大化,学习一个线性支持向量机;

  • 当训练样本线性不可分时,通过核技巧和软间隔最大化,学习一个非线性支持向量机;

阅读全文 »

设计模式

发表于 2019-06-05 更新于 2019-10-20

概述

总共24种设计模式,6个创建型模式,7个结构型模式,11个行为型模式。

https://blog.csdn.net/liang19890820/article/category/6783147

创建型模式

  1. 简单工厂模式-Simple Factory Pattern【学习难度:★★☆☆☆,使用频率:★★★☆☆】

  2. 工厂方法模式-Factory Method Pattern【学习难度:★★☆☆☆,使用频率:★★★★★】

  3. 抽象工厂模式-Abstract Factory Pattern【学习难度:★★★★☆,使用频率:★★★★★】

  4. 单例模式-Singleton Pattern【学习难度:★☆☆☆☆,使用频率:★★★★☆】

  5. 原型模式-Prototype Pattern【学习难度:★★★☆☆,使用频率:★★★☆☆】

  6. 建造者模式-Builder Pattern【学习难度:★★★★☆,使用频率:★★☆☆☆】

结构型模式

  1. 适配器模式-Adapter Pattern【学习难度:★★☆☆☆,使用频率:★★★★☆】

  2. 桥接模式-Bridge Pattern【学习难度:★★★☆☆,使用频率:★★★☆☆】

  3. 组合模式-Composite Pattern【学习难度:★★★☆☆,使用频率:★★★★☆】

  4. 装饰模式-Decorator Pattern【学习难度:★★★☆☆,使用频率:★★★☆☆】

  5. 外观模式-Facade Pattern【学习难度:★☆☆☆☆,使用频率:★★★★★】

  6. 享元模式-Flyweight Pattern【学习难度:★★★★☆,使用频率:★☆☆☆☆】

  7. 代理模式-Proxy Pattern【学习难度:★★★☆☆,使用频率:★★★★☆】

行为型模式

14 . 职责链模式-Chain of Responsibility Pattern【学习难度:★★★☆☆,使用频率:★★☆☆☆】

  1. 命令模式-Command Pattern【学习难度:★★★☆☆,使用频率:★★★★☆】

  2. 解释器模式-Interpreter Pattern【学习难度:★★★★★,使用频率:★☆☆☆☆】

  3. 迭代器模式-Iterator Pattern【学习难度:★★★☆☆,使用频率:★★★★★】

  4. 中介者模式-Mediator Pattern【学习难度:★★★☆☆,使用频率:★★☆☆☆】

  5. 备忘录模式-Memento Pattern【学习难度:★★☆☆☆,使用频率:★★☆☆☆】

  6. 观察者模式-Observer Pattern【学习难度:★★★☆☆,使用频率:★★★★★】

  7. 状态模式-State Pattern【学习难度:★★★☆☆,使用频率:★★★☆☆】

  8. 策略模式-Strategy Pattern【学习难度:★☆☆☆☆,使用频率:★★★★☆】

  9. 模板方法模式-Template Method Pattern【学习难度:★★☆☆☆,使用频率:★★★☆☆】

  10. 访问者模式-Visitor Pattern【学习难度:★★★★☆,使用频率:★☆☆☆☆】

阅读全文 »

C++常用新特性

发表于 2019-06-05 更新于 2019-10-20

C++11 & C++14 & C++17 常用新特性总结

GCC编译器(从编译器GCC4.8.X的版本完全支持)

  (1)目前C++11特性,之前成为C++0X特性,从GCC4.3的后续版本中逐步对C++11进行支持。

  (2)从官方信息可以看到,目前从完全对C++11特性进行支持的是从编译器GCC4.8.X的版本。

  参考网址:https://gcc.gnu.org/projects/cxx-status.html#cxx11

​ 编译的时候加上参数:

1
-std=c++11

C+11新特性

nullptr

传统 C++ 会把 NULL、0 视为同一种东西,这取决于编译器如何定义NULL,有些编译器会将 NULL 定义为 ((void*)0),有些则会直接将其定义为 0.

C++ 不允许直接将 void * 隐式转换到其他类型,但如果 NULL 被定义为 ((void*)0),那么当编译char *ch = NULL;时,NULL 只好被定义为 0。

这样就会导致重载特性混乱,比如foo(NULL)调用的是foo(int)

1
2
void foo(char *);
void foo(int);
阅读全文 »

C++编程指南

发表于 2019-05-30 更新于 2019-10-20

C++ 基础知识备忘

常用字符串函数

头文件
include<string.h>
1
2
3
4
strlen() // 实际字符串长度,不包括'\0'
strcpy(dest,src) // 复制字符串,包括'\0',如果src大于dest,crash
strncpy(dest,src,num) // 复制n个字符,不包括'\0',如果src大于num,只复制num个
const char *strstr(const char *str1, const char *str2); // 在str1中查找str2,返回找到的起始地址,如果没找到返回null
阅读全文 »

以太网芯片MAC和PHY的关系

发表于 2019-05-22 更新于 2019-10-20

以太网媒体接入控制器(MAC)和物理接口收发器(PHY)

以太网MAC是什么?

MAC即Media Access Control,即媒体访问控制子层协议.该协议位于OSI七层协议中数据链路层的下半部分,主要负责控制与连接物理层的物理介质.在发送数据的时候,MAC协议可以事先判断是否可以发送数据,如果可以发送将给数据加上一些控制信息,最终将数据以及控制信息以规定的格式发送到物理层;在接收数据的时候,MAC协议首先判断输入的信息并是否发生传输错误,如果没有错误,则去掉控制信息发送至LLC层.该层协议是以太网MAC由IEEE-802.3以太网标准定义.最新的MAC同时支持10Mbps和100Mbps两种速率.

阅读全文 »

STL从0开始

发表于 2019-05-21 更新于 2019-10-20

容器(Containers)

顺序容器

array [c++11]

vector

单开口,预留空间

emplace_back[c++11] 在最后构造并插入

list

容器适配器

stack

后进先出 使用deque/list,不用vector的原因应该是容量大小有限制,扩容耗时

queue

先进先出 使用deque/list,不用vector的原因应该是容量大小有限制,扩容耗时

deque

关联容器

set

map

multiset

multimap

无序关联容器

unordered_set [c++11]

unordered_map [c++11]

unordered_multiset [c++11]

unordered_multimap [c++11]

阅读全文 »

shadowsocks

发表于 2018-05-17 更新于 2019-10-20

客户端

https://shadowsocks.com/client.html

OS X 客户端

  • shadowsocks-gui - Cross-platform GUI powered by node and Webkit
  • GoAgentX - OS X client, with GUI
  • Shadowsocks for Mac - Shadowsocks GUI designed for OS X 10.7+

Windows 客户端

  • GoAgent+ - Windows client
  • shadowsocks-gui - Cross-platform GUI powered by node and Webkit
  • shadowsocks-csharp - Windows version with GUI
  • Yingwa - Shadowsocks Windows client
阅读全文 »

Boost基础知识

发表于 2018-05-17 更新于 2019-10-20

BoostDemo

1. 下载编译使用

下载地址

1
./bootstrap.sh;./b2

第一条命令bootstrap.sh是编译前的配置工作,第二条命令b2开始

Makefile:

1
2
3
CFLAGS= -std=c++11 					#Linux应使用gnu++0x
INCLUDE=I/Users/chrono/boost/ #Boost库安装在用户主目录
STDLIB= -stdlib=libc++ #Linux无需此FLAG
阅读全文 »

Esp8266和HomeKit

发表于 2018-05-17 更新于 2019-10-20

Summary

没有找到合适的简单解决方案,将Esp8266控制的设备连接到HomeKit.
所以参照EspEasy实现 HomeKit和Esp8266连接。

连接方式:

1

阅读全文 »
12345

XuQi

44 日志
30 标签
© 2019 XuQi
由 Hexo 强力驱动 v3.9.0
|
主题 – NexT.Muse v7.3.0