C/C++
文章平均质量分 54
weilin.jiang
Windows内核砖家
展开
-
windows 10环境下 使用 msys2 + vs code 配置 c++ 的编译环境(转)
不太多描述 msys2 与 vs code ,既然你需要安装 一种语言的编译环境了 ,你肯定对这两个不陌生;1. 先安装msys2; (下载多少位的msys2就安装多少位的 mingw,本人安装 32位的)下载连接地址:http://msys2.github.io/按照 官网文档,一步一步安装。2.修改msys 源(推荐修改)修改参考地址:https:/转载 2017-05-19 16:54:30 · 2989 阅读 · 0 评论 -
【UNIX环境高级编程】信号安全——可重入函数
可重入函数(用于信号处理函数、 且 安全时的叫法),即是在信号处理函数中可以调用的函数,他们是安全的,不安全的如malloc(试想:线程正在调用malloc进行分配,而信号来了,在处理函数里面有调用malloc,那么就很有可能对进程造成破坏,破坏储存区维护的链表)、getpwnam等可重入函数在处理操作期间,会阻塞任何会引起不一致的信号发送。试想下面一个情况:因原创 2016-07-06 15:57:04 · 1129 阅读 · 0 评论 -
【服务器编程】多线程安全数据库连接池
某风平浪静的晚上,我和多线程搅上劲,如何在多线程环境安全创建连接池、释放、使用,想了很久,写了很久,写出了如下代码,感觉也很多bug吧。发表此文,谨表示我今晚不知道为什么如此 较真,很想做到完美,可是能力还是不到那个高度,写不出很完美的代码。如果有想法的同志路过,留点提示给我,谢谢谢谢。/* 析构不知道怎么在多线程保证安全,程序员责任,我的脑袋要炸了 *//* 销毁由一个线程完成原创 2016-07-05 23:56:10 · 2746 阅读 · 0 评论 -
【QT学习】View和Model
http://doc.trolltech.com/main-snapshot/model-view-programming.html介绍Qt 4推出了一组新的item view类,它们使用model/view结构来管理数据与表示层的关系。这种结构带来的功能上的分离给了开发人员更大的弹性来定制数据项的表示,它也提供一个标准的model接口,使得更多的数据源可以被这些item view使用。这转载 2016-06-20 02:32:58 · 2769 阅读 · 0 评论 -
【算法学习】计算n次方——变治法
在计算a^n次方时,先将n变一变,寻找新的计算路径,预处理就是变治法的根本!如果单纯循环执行n次相乘,那么时间复杂度为O(n),n为指数;利用二进制幂大大改进效率。利用二进制幂求解分两种方法:从左至右二进制幂 和 从右至左二进制幂。从左至右二进制幂变换:a^n = a^(b[n]2^n + ... + b[0]2^0) == ((b[n]*2 + b[n原创 2016-06-16 19:38:46 · 4624 阅读 · 0 评论 -
【算法学习】horspool查找匹配字符串
Horspool算法(时空权衡)利用空间提高时间效率该算法是从模式串右往左方向匹配文本的,找不到匹配就右移模式串继续找。文本串: s0 s1 .... A sn B R O S E R (R与A不匹配) s0 s1.... A R sn B R O S原创 2016-06-16 21:04:27 · 1778 阅读 · 0 评论 -
【服务器编程】EPOLL的LT和ET模式的区别和理解
【前言】epoll模型是服务器编程的高性能框架,比select 和 poll模型高效很多,当然还有其它的模型,如kqueue等,具体linux发行版提供不同的模型,一般都支持epoll吧。【理解】epoll提供两种工作模式:LT 和 ET。LT模式是epoll默认的工作方式,相当于一个效率很高的poll模型;而ET是高效的工作方式。LT 和 ET本质的区别是:原创 2016-07-07 23:05:04 · 20511 阅读 · 6 评论 -
【网络编程】Linux多播简单实现
在测试多时先确定测试的接口(网卡)是否已经开启多播功能,如下:图.1其中RUNNING MULTICAST表示开启了多播功能,可用ifconfig命令开启多播数据发送端:#include #include #include #include #include #include #include #include #include int main(i原创 2016-06-05 17:26:42 · 957 阅读 · 0 评论 -
【算法学习】切割木棍问题——动态规划
问题描述:假设,有一条长度为n的木棍,已知木棍的销售价格Pi与木棍长度i有关,i = 1,2,3,...n.问,怎样切割能获得最大收益。长度为0的木棍收益肯定是0了,即profit[0] = 0.切割长度(seg)12345678910销售价格(pi)15891017172024原创 2016-06-05 15:49:47 · 12226 阅读 · 2 评论 -
【Effective C++】为类设计new_handler
如果我想在new调用出现异常时,捕捉住它而不是由于它而终止程序,那么就需要利用C++提供的set_new_handler函数,内部定义如下:namespace std{ typedef void (*new)handler)(); new_handler set_new_handler(new_handler p) throw();}为了不改变全局的new_handler可以这样设原创 2016-06-04 20:10:16 · 533 阅读 · 0 评论 -
【算法学习】快包算法
#include "stdafx.h"#include #include #include #include 坐标数据结构:typedef struct{ float x; float y;}Point;typedef bool(*Func)(Point, Point, Point);判断点test是否在a,b组成的直线的上方:bool Upstair(Point a原创 2016-06-04 15:06:22 · 2471 阅读 · 0 评论 -
【STL源码剖析】__type_traits技法
上篇介绍了__iterator_traits编程技法,SGI 将这种技法进一步扩大到迭代器以外,于是有了所谓的__type_traits。iterator_traits负责萃取迭代器的特性,__type_traits则负责萃取型别的特性。而这里我们关注的型别特性是指:这个型别是否具备non-trivial default ctor\non-trivial copy ctor\ no原创 2016-06-04 14:53:59 · 760 阅读 · 0 评论 -
【STL源码剖析】__iterator_traits技法
__iterator_traits技法用于模板编程,STL所有算法都是基于模板实现的。先看下面是一个例子:template void func_impl(I iter, T t){ // ...}templateinline void func(I iter){ func_impl(iter, *iter); // ...}int main(){ int i;原创 2016-06-04 12:15:31 · 1187 阅读 · 0 评论 -
【服务器编程】MYSQL数据库连接池封装
【前言】现代服务器后台数据基本上都用数据库管理,因为他有一套完整的数据保存方案,本连接池是根据MYSQL提供的纯C API封装。【上回战况】目前,服务器添加了文件服务器类,只是简单的文件传输;但是没有使用数据库保存文件的信息,随着数据的增加,文件的管理肯定就很难。【目前战况】为了同意所有线程访问数据库的方式,封装一个连接池,如下:class MYSQLConnPoo原创 2016-04-23 16:39:23 · 1003 阅读 · 0 评论 -
【面经】腾讯秋招电话一面
【过程】七点不到半点接到电话,开始话面:问: C++重载、重写是什么?怎么实现的?答:重载是编译期编译函数时,根据参数类型和个数来决定编译出的函数符号,从而实现重载(C不支持重载);重写是针对C++多态,通过虚函数表实现。问:如何写一个类,使其不能被继承?答:C++1标准支持final关键字,通过它可以限制;另外一个方法是通过模板(具体见《剑指offer》,当时没有答出来)。原创 2016-08-22 20:41:10 · 1339 阅读 · 2 评论 -
【C++】零碎知识
1.线程在函数里面创建的静态局部变量不会随线程的结束而被释放。 ------2016.09.12原创 2016-09-12 16:19:05 · 389 阅读 · 0 评论 -
Singleton优化(Double-Checked Locking Pattern)
Singleton简单实现class Singleton{public: static Singleton* GetInstance() { Guard(mutex); if (!instance) instance = new Singleton; return instance; }privat原创 2017-04-18 12:23:47 · 797 阅读 · 0 评论 -
UML类图几种关系的总结
转自:http://blog.csdn.net/tianhai110/article/details/6339565在UML类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization), 关联(Association), 聚合(Aggregation), 组合(Composition), 依赖(Dependency) 1.转载 2016-09-14 12:01:36 · 721 阅读 · 0 评论 -
【FFmpeg(2016)】SwrContext 转换PCM音频位数
【相关博客】【FFmpeg(2016)】PCM编码AAC【FFmpeg(2016)】SwrContext重采样结构体【前言】这两天在做一些音频的编码,但FFmpeg的编码库avcodec有20M这么大,所以决定使用其他库进行编码。网上发现faac体积小,直接编解码,于是决定使用faac库作为编码模块。但是从faac的源码发现,它只支持如下格式的PCM编码:原创 2017-03-15 19:28:38 · 3845 阅读 · 0 评论 -
【Window】Win32 API连接热点
Window 无线网络处理相关博文:【Window】获取电脑连接的网络信息Window 平台操作无线网络相关的的问题,大多都是使用 wlanapi 库,以下连接Wifi也不例外。要连接热点得必须有ssid 和 key.,window没有提供现成的函数,提供两个参数可以直接连接wifi,wifi 连接过程也是有学问的,那就是要提供一个profile ,原创 2017-01-08 13:23:51 · 2463 阅读 · 0 评论 -
Win7 vs2015编译protobuf-3.0.0
需要工具:1. visual studio 2015 2. cmake3.git[可选]安装完毕,继续从官网下载protobuf :https://github.com/google/protobuf/releases/tag/v3.0.0window编译protobuf有两种方式:一个使用vs自带的msvc(环境测试vs开发者命令行原创 2016-09-20 17:41:52 · 8389 阅读 · 0 评论 -
C运行时库(C Run-time Library)详解
一、什么是C运行时库1)C运行时库就是 C run-time library,是 C 而非 C++ 语言世界的概念:取这个名字就是因为你的 C 程序运行时需要这些库中的函数.2)C 语言是所谓的“小内核”语言,就其语言本身来说很小(不多的关键字,程序流程控制,数据类型等);所以,C 语言内核开发出来之后,Dennis Ritchie 和 Brian Kernighan 就用 C 本转载 2016-09-21 13:35:17 · 1277 阅读 · 0 评论 -
【QT开发】一些零碎知识
1.乱码QTextCodec *codec = QTextCodec::codecForName("GB18030");setWindowTitle(codec->toUnicode("我是中文"));2.QTimer 调用start后,如果槽函数时间比start的实参数值大,那么start直到上次执行的函数返回才能继续调用槽函数。3.用QThread开启线程时,在run函原创 2016-09-11 16:16:44 · 563 阅读 · 0 评论 -
【Window编程】内核对象
内核对象 比如存取符号对象、事件对象、文件对象、文件映射对象、 I / O完成端口对象、作业对象、信箱对象、互斥对象、管道对象、进程对象、信标对象、线程 对象和等待计时器对象等1. 每个内核对象只是内核分配的一个内存块,并且只能 由该内核访问。该内存块是一种数据结构,它的成员负责维护该对象的各种信息2. 句柄指向 内核对象 ,为了使操作原创 2016-10-12 21:22:12 · 692 阅读 · 0 评论 -
【FFmpeg(2016)】AVCodecContext解码网络流
【前言】一般读取视音频文件解码时,我们会使用AVFormatContext。【对比】简单记录一下这个只使用libavcodec的“纯净版”视频解码器和使用libavcodec+libavformat的视频解码器的不同。(1)下列与libavformat相关的函数在“纯净版”视频解码器中都不存在。av_register_all():注册所有的编解码原创 2016-10-07 16:51:20 · 4523 阅读 · 2 评论 -
Visual Studio无法定位于动态链接库
今天用vs开发ffmpeg突然冒出一个这样的错误由于程序用到了 avcodec 和 avutil 这两个库,而 av_frame_alloc是属于 avutil这个库的。以下通过查询头文件,发现 av_frame_alloc 并非属于 avcodec 动态库的函数,那为什么会这样子呢?我决定再查询一下 avcodec-57.all 和 libav原创 2016-09-24 08:54:05 · 5332 阅读 · 1 评论 -
window运行可执行模快
程序运行时,加载程序会检查执行模块的导入段,试图找到用到的dll的路径,搜查的路径顺序为:1. 包含可执行文件的路径2. window系统目录,可通过GetSystemDirectory获得 。-》c:/window/system323. 16位系统的子目录,即window目录中的System子目录4. window系统目录,通过GetWindowDirectory获得原创 2016-09-20 15:10:59 · 645 阅读 · 0 评论 -
【Win32笔记四】Mesasge的定义和发送——消息队列
【讯息的定义】PostMessage 是将一个消息寄送到一个线程的消息队列后就立即返回。PeekMessage 该函数为一个消息检查线程消息队列,并将该消息(如果存在)放于指定的结构。GetMessage 获取一个讯息,当第二三四参数为NULL或者0时,代表接受程式的所有讯息SendMessage 该函数将指定的消息发送到一个或多个窗口。此函数为指定的窗口调用窗口程序,直原创 2016-10-09 11:37:57 · 822 阅读 · 0 评论 -
Qt for Windows:Qt 5.4.0 MinGW 静态编译版本制作
原文地址:http://blog.csdn.net/wsj18808050/article/details/42301561/本文将讲述如何在Windows中,用源码版本的Qt制作出一个可以一键静态编译Qt我使用的环境是:Windows7 64位 旗舰版大致流程:1.安装Qt(源码版)以及其他必要的环境2.编译/安装转载 2016-09-20 09:38:37 · 578 阅读 · 0 评论 -
【Qt开发】窗口切换
该文章转自:http://www.2cto.com/kf/201203/124441.html! Qt多窗口切换程序1.ui文件中布局 2.主要程序 main.cpp[cpp] view plain copy #include #include "mainwindow.h" int main(int argc, c转载 2016-05-29 18:05:30 · 790 阅读 · 0 评论 -
【服务器编程】基础概念与功能划分
前言一个服务器框架可划分为三个部分,分别是 I/O模型、事件处理模式、并发模式。图.1I/O处理单元:处理客户连接,读写网络数据(机群情况:可实现负载均衡)逻辑处理单元:业务进程/线程(机群情况:逻辑服务器)网络存储单元:本地数据库、文件或者缓存(机群情况:数据库服务器)当然,划分并不是一成不变的;如有时I/O处理单元的 读写网络数据 可能由逻辑处理单元承担,那原创 2016-04-16 13:20:12 · 688 阅读 · 0 评论 -
C++Primer学习之一引用和指针
一.引用引用是一种复合类型,引用分为左值引用和右值引用,其中右值引用时C++11提出来的,常说的引用其意为左值引用。注意:引用不是对象,它是一个对象(变量)的别名,不能改变引用的对象,故必须在初始化的确定引用的对象。 (1)引用(左值引用)引用的类型必须和被引用变量的类型一致,但有两种例外情况。①const引用double dval = 3.14;Const int原创 2016-01-30 21:10:44 · 624 阅读 · 0 评论 -
C++Primer学习之二#define,const,constexpr
一.#define 是预处理操作符(宏定义),编译器将在编译过程中用到该变量的地方替换成对应的值。二.Constconst是声明常量的限定符,它可以约定一个变量为常量。如:Const int buffsize = 1024;编译器将在编译过程中用到该变量的地方替换成对应的值,这个效果和#define,constexpr是一致的。const常量只有在const i原创 2016-01-30 21:15:40 · 5362 阅读 · 2 评论 -
C++Primer学习之三auto和decltype
auto 和 decltype均是c++11提出的。原创 2016-01-30 21:22:30 · 678 阅读 · 0 评论 -
SMTP-发送邮件
1. 创建socket套接字 SOCKET s = socket(PF_INET,SOCK_STREAM,0); 2.获取smtp服务器地址 sockaddr_in sin; memset(&sin, 0, sizeof(sin)); sin.sin_family = AF_INET; sin.sin_port = htons(25);原创 2016-01-18 14:12:24 · 1469 阅读 · 0 评论 -
基于socket原始套接字的网络嗅探器
// NetSniffer.cpp : 定义控制台应用程序的入口点。///*简单说明一下什么是网络嗅探器,网络嗅探器是一个抓取所有经过网卡数据的软件,在一般使用电脑时,网卡只接受到发送至本机的数据,那是因为这是网卡是非混杂模式的,挡一个目的地址非本机地址的数据包经过网卡时,网卡在数据链路层(mac地址)检测到是非本机数据,则直接丢弃,当设置为混杂模式时,所有经过网卡的数据包均可被读取出原创 2015-11-28 12:50:04 · 7809 阅读 · 6 评论 -
GUN C/C++ __attribute__ 用法
GNUC的一大特色(却不被初学者所知)就是__attribute__机制。__attribute__可以设置函数属性(FunctionAttribute)、变量属性(Variable Attribute)和类型属性(Type Attribute)。__attribute__书写特征是:__attribute__前后都有两个下划线,并切后面会紧跟一对原括弧,括弧里面是相应的__attribute转载 2015-11-19 20:10:43 · 6039 阅读 · 0 评论 -
基于winpcap的网络mac地址发现
arp数据包格式:主要文件有:datastruct.h 存储数据包格式的数据结构transfunc.h 发送arp的封装函数声明transfunc.cpp 定义Winpcap_arp.cpp main函数datastruct.h #ifndef HEADERSTRUCT_H#define HEADERSTRUCT_H//原创 2015-11-20 23:30:21 · 5179 阅读 · 1 评论 -
socket实现ping嗅探,获取局域网所有活动主机
大概思路是:获取本主机IP,然后将它和子网掩码进行与操作,可知道子网的主机号范围,然后逐个进行Ping,最多ping4次。ping是基于icmp报文的,它被封装在ip中发送出去。主要问题是,这样单线程Ping速度真的非常慢,所以我尝试了多线程,不过过程并不顺利,主要是在recvIcmp过程中,内部或许有些更复杂的步骤。不过,有个简单的实现方法是通过system函数调用DOS原创 2015-12-11 12:06:12 · 5298 阅读 · 0 评论 -
windows基于TCP/IP的简单文件/图片传输
详细函数资料参考msdn// TransPic_Server.cpp : 定义控制台应用程序的入口点。/* Server.cpp*///#include "stdafx.h"#include #include #include #define BUF 256#pragma comment(lib, "Ws2_32.lib")int _tmain(int argc,原创 2015-11-21 17:04:41 · 2983 阅读 · 1 评论