自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(58)
  • 资源 (3)
  • 收藏
  • 关注

原创 最简单的c++/lua中间层 ---- XScript

XScript介绍​ lua是一种轻量小巧的脚本语言,免费开源,简单易学,c/c++这类低级语言胜在能够直接与操作系统打交道,从而能够最大限度的利用系统资源,但是写逻辑不太方便,“C++/lua”是游戏界比较常用的一种开发语言解决方案,用c++做服务器底层,再嵌入lua编写业务逻辑是比较常用的一种解决方案,用c++做服务器底层,再嵌入lua编写业务逻辑,这种组合能够比较好的平衡性能与开发效率。​ XScript是一个跨平台c++/lua交互库,内置lua面向框架,支持远程调试,能够编译成静态库或者动态库

2022-01-11 22:57:39 1423

原创 mysql statement 操作

mysql statement 基本操作概述MySQL客户端/服务器协议提供了预处理语句。该功能采用了由mysql_stmt_init()初始化函数返回的MYSQL_STMT语句处理程序数据结构。对于多次执行的语句,预处理执行是一种有效的方式。首先对语句进行解析,为执行作好准备。接下来,在以后使用初始化函数返回的语句句柄执行一次或多次。对于多次执行的语句,预处理执行比直接执行快,主要原因在于,仅对查询执行一次解析操作。在直接执行的情况下,每次执行语句时,均将进行查询。此外,由于每次执行预处理语句时仅需

2021-06-10 09:08:36 783

原创 Windows两种获取毫秒时间戳的方法

windows平台获取毫秒时间戳的两种方法通过 ftime 获取毫秒时间戳#include <sys/timeb.h>uint64_t TimeMilliSecond(){ timeb now; ftime(&now); return now.time*1000 + now.millitm;}通过 GetSystemTimeAsFileTime获取毫秒时间戳#include <windows.h>uint64_t TimeMilli

2021-04-06 10:54:31 7051

原创 c++ 智能指针 -- shared_ptr

2.1 基本语义share_ptr 允许多个share_ptr对象共享听一个资源,通过引用计数来管理共享资源的生命周期,当最后一个shared_ptr对象被销毁时,引用计数变为0,其管理的资源也就被释放了。2.2 实现原理每一个shared_ptr包含一个引用计数指针,当其copy constructor或者assignment operator执行时候,其引用计数增加1,当其析构函数执行时候,其引用计数减1,引用计数增加或者减少是原子操作,因此多线程操作是安全的,其具体实现见如下代码 tem

2021-01-31 21:24:17 204

原创 c++ 智能指针 -- unique_ptr

1.1 基本语义c++11 引入unique_ptr智能指针,其对所管理资源拥有独占语义,不能多个多个unique_ptr管理同一个资源,离开其作用域时,会使用与其关联的删除器释放所管理的资源,c++14新增 make_unique工程方法来构造unique_ptr指针,从而避免在程序中显示使用new分配内存。unique_ptr提供了两个构造函数,用来管理数组或者对象资源,其Deleter模板参数可以指定删除器,用来释放所管理的资源template< class T, clas

2021-01-31 13:00:56 220

原创 msvc内存泄漏检测

msvc内存泄漏检测MSVC 调试库内建了内存泄漏检查工具,默认情况下没有开启,可以通过如下步骤开始在代码开头加入一下三行代码#define _CRTDGB_MAP_ALLOC#include <cstdlib>#include <crtdbg.h>重新定义new运算符#ifdef _DEBUG #ifndef _DGB_NEW #define DGB_NEW new ( _NORMAL_BLOCK, __FILE__,__LINE__

2021-01-26 00:35:30 461

原创 对学习的认知

对学习的认知​ 刚刚换工作,最近每天都很头疼,因为新工作中客户端要使用UE4开发,服务器使用c++开发,因为目前的工作模式是要求开发人员客户端,服务器双端开发,对c++我是非常熟悉的,同时作为一个三年工作经验的资深服务器程序,对服务器开发并没有什么恐惧,但是对于客户端UE4,似乎很多东西没有接触过,对于新领域。莫名的恐惧。最近一直在学习UE4的开发模式和开发工具的使用,但是学习的越多,焦虑越大,虽然面对工作上的东西完全够用,但是心中还是莫名的恐惧,因为要学习的东西太多,不知道从哪里学习起,同时家里的电脑配

2020-05-26 23:38:08 219

原创 ssh 免密登录

ssh 免密登录ssh免密登录简述实现ssh免密登录核心工作为在本机生成 ssh密钥对后将本机公钥内容写至服务器 ~/.ssh 目录下authorized_keys 文件中,并在服务器主机中设置认证文件为 authorized_keys 配置文件为 sshd_config具体步骤在本机生成ssh密钥(输入如下命令,enter 到底)mkdir ~/.sshssh-keygen -t...

2019-08-23 17:27:18 136

原创 VIM文本替换

VIM文本替换1.替换当前行中的内容:

2019-08-23 17:23:20 1670

原创 centos 产看系统版本

centos 产看系统版本显示系统版本cat /etc/redhat-release结果如下cat /proc/version结果如下 uname -a结果如下查看位数getconf LONG_BITfile /bin/ls

2019-08-23 17:17:36 244

原创 线程编程 -- __thread

线程编程 – __thread一. __thread 定义​ __thread是GCC内置的线程局部存储设施,存取效率可以和全局变量相比。​ __thread变量每一个线程有一份独立实体,各个线程的值互不干扰。可以用来修饰那些带有全局性且值可能变,但是又不值得用全局变量保护的变量。二. _thread使用规则只能修饰POD类型(类似整型指针的标量,不带自定义的构造、拷贝、赋值、析构的类型...

2019-08-23 09:05:57 256

原创 nodejs 多进程篇

nodejs 多进程篇子进程创建模块 child_processspawn() : 启动一个子进程用来执行命令exec() : 启动一个子进程来执行命令,通过回调函数获取子进程的情况execFile(): 启动一个子进程用来执行命令fork(): 与spqwn类似,但是必须指定js文件或模块用例一. spawn 启动子进程执行操作系统命令try { let cp...

2019-08-11 22:10:13 566

原创 mysql触发器

一. 概述定义: 触发器是与表有关的对象在满足定义的条件时触发,并执行相关的语句作用: 协助应用在数据库端确保数据的完整性。二. 语法2.1创建触发器CREATE TRIGER trigger_name trigger_time trigger_eventON table_nameFOR_EACH_ROW trigger_stmttrigger_name :...

2019-05-25 18:42:39 150

原创 03 libuv TCP编程

一. 概述libuv提供了一组与BSC socket接口概念相同,但是操作更简单,非阻塞接口。除此之外,libuv提供了一些工具函数对BSD socket结构进行了抽象,例如DNS查询。二. TCP server 编程步骤uv_tcp_init初始化TCP handleuv_tcp_bind 绑定host及端口uv_tcp_listen对其进行监听,设置accept回掉处理accep...

2019-04-16 23:30:30 362

原创 02 libuv文件操作

1. 概述libuv可通过uv_fs_*系列函数和 uv_fs_t 结构体进行操作。所有文件均提供同步和异步两种操作方式,在API函数使用过程中主要区别是函数回调是否为NULL,如果为NULL,则使用同步模式,其返回值则是文件描述符,否则则以异步方式调用,其返回值为libev错误码。特别注意libev 文件异步操作与socket不同,socket异步操作是依靠操作系统提供的非阻塞接口,文件...

2019-04-16 16:17:12 701

原创 # 常见归档命令示例

常见归档命令示例.tar解包:tar xvf FileName.tar打包:tar cvf FileName.tar DirName(注:tar是打包,不是压缩!).gz解压1:gunzip FileName.gz解压2:gzip -d FileName.gz压缩:gzip FileName.tar.gz解压:tar zxvf FileName.tar.gz压缩:tar zc...

2019-04-15 16:46:20 207

原创 ERROR 1698 (28000): Access denied for user 'root'@'localhost'已解决

ubuntu 16.04 下安装新版mysql,登录时必须sudo mysql -u root -p,因为安装时root用户的密码是随机的,直接mysql -u root -p则无法登录,报错:ERROR 1698 (28000): Access denied for user ‘root’@'localhost解决方案:步骤一:登录mysql sudo mysql -u root -p...

2019-04-07 10:27:28 784 1

原创 unix编程-进程

linux编程 - 进程一. 简介​ 进程是一个程序的一次执行过程,在linux中,每个正在运行的程序都成为进程,进程是程序执行的过程,包括动态创建,调度和消亡的整个过程,是程序执行和资源管理的最小单位​ 进程号(PID)​ 在进城启动是,系统会指定一个唯一ID的数值给进程,这个数值就是进程号(PID),系统中第一个进程是Init进程PID为1,其他进程一次增加,如果要对进程进行操作管理,...

2019-04-07 10:26:52 170

原创 mysql连接错误 - is not allowed to connect to this my sql server

远程连接错误 - is not allowed to connect to this my sql server查看mysql服务器中mysql数据库中的表,发现mysql服务器只有本机可连接,百度一下,是访问权限问题,执行命令可解决问题,GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'mypassword' WITH GRAN...

2019-04-03 15:08:11 503

原创 window网络编程 - select模型(实践篇)

一. main.cppinclude <iostream>using namespace std;#include "CWinNetStartup.h"#include "CSelectModel.h"#define PrintError( szNote )\ cout<< szNote << " Error : "<<WSAGet...

2019-03-22 00:58:21 374

原创 mysql存储引擎

##MyISAMMyISAM是mysql默认存储引擎缺点: MyISAM不支持事物也不支持外键优点: 访问速度快使用场景: 对事物完整性没有要求或者以select,insert为主的应用基本上都可以使用这个引擎创建表MyISAM 的表又支持 3 种不同的存储格式,分别是:静态(固定长度)表;动态表;压缩表。其中,静态表是默认的存储格式。静态表中的字段都是非变长字段,这样每个记录...

2019-01-17 23:45:48 186

原创 mysql 锁优化

20.1 概述mysql锁分类表级锁:开销小,枷锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。行级锁:开销大,枷锁慢;会出现死锁;锁定粒度小,发生锁冲突的概率最低,并发性度最高。页面锁:开销和加锁时间节约表锁和行锁之间;会出现死锁;锁定粒度介于表锁和行锁之间,并发性一般;存储引擎对锁的支持**锁冲突:**例如说事务A将某几行上锁后,事务B又对其上锁,锁不能共存否则...

2019-01-17 23:44:42 275

原创 curl库实现get及post请求

#pragma once#include &amp;lt;map&amp;gt;#include &amp;lt;string&amp;gt;class CHttpHelp{public: CHttpHelp(void); ~CHttpHelp(void); static void InitCURL(); static void CleanupCURL(); std::st...

2018-07-10 20:08:50 678

原创 IO复用 -- kqueue

IO复用 – kqueue标签(空格分隔): IO复用摘要kqueue 是 FreeBSD 上的一种的多路复用机制。它是针对传统的 select/poll 处理大量的文件描述符性能较低效而开发出来的。注册一堆描述符到 kqueue 以后,当其中的描述符状态发生变化时, kqueue 将一次性通知应用程序哪些描述符可读、可写或出错了。kqueue 支持多种类型的文件描述符,包...

2018-07-09 22:47:07 841

原创 C++枚举某个目录下所有文件

C++枚举某个目录下所有文件标签(空格分隔): iso c++c++提供文件遍历的方法如下 一个结构体 三个函数struct _finddata32_t{ unsigned attrib; //文件属性 __time32_t time_create; // 创建时间 __time32_t time_access; ...

2018-06-16 12:11:21 3184

原创 c++ boost库--线程同步

Mutex对象#include &lt;boost/thread/mutex.hpp&gt;#include &lt;boost/thread/shared_mutex.hpp&gt;boost::mutex //支持排他访问的互斥对象。boost::try_mutex //等同于 boost::mutex, 用...

2018-06-12 20:50:32 870

原创 c++ boost库--信号处理

c++ boost库–信号处理标签(空格分隔): c++ boost概述在windows编程中,每一次按键,或者数遍移动,或者其他动作都会向系统消息队列中,投递一条对应的消息,而应用程序捕捉到对应的消息后,要在消息循环中做对应的处理,例如按下键盘,要会产生WM_KEYDOWN消息,在消息循环中要对其进行处理。按下按键即为事件,而对消息进行处理的代码即为消息处理器,qt中直接将每...

2018-06-12 10:12:38 1718

原创 VS2015 安装配置boost库

下载boost库 https://www.boost.org/ 解压boost,解压文件如下 安装 通过vs2015命令行工具 进入boost库解压目录下,运行安装脚本bootstrap.bat,结果如下 运行完成后,其文件目录如下 运行bjam安装程序安装编译boost库,大概耗时间10分钟左右 完成后,结果如下 如上,提示include和lib路径,...

2018-06-08 00:39:01 4577

原创 ADO编程-Command对象

ADO编程-Command对象标签(空格分隔): 数据库Command对象定义了将对数据源执行的指定命令。该对象的常用属性和方法如下:ActiveConnection属性:该属性指定Command对象所属的Connection对象。CommandText属性:该属性包含发送给数据提供者的命令文本,根据DBMS的不同,数据提供者能够执行的命令格式也有所不同。该属性的值为包含数据提...

2018-06-03 17:22:04 1199

原创 ADO编程-RecordSet对象

ADO编程-RecordSet对象标签(空格分隔): 数据库在ADO程序中,记录集(Recordset)对象代表一个表的记录集合或者是一个SQL命令或存储过程执行结果。简单地说:记录集实际上缓存了从数据库获得的记录,应用程序可以从记录集中获得每条记录的字段。Recordset对象的常用属性和方法:RecordCount属性:返回Recordset对象中记录的当前数目BOF,...

2018-06-03 13:02:21 580

原创 c++ADO编程-connection对象

Connection对象的属性有如下几个:1.ConnectionString属性:是连接字符串,通过传递包含一系列由分号分隔的“argument=value”语句的详细连接字符串,可指定用于建立连接数据源的信息。连接串格式根据数据源的不同有所不同。2.Open方法:建立到数据源的物理连接。Open函数详细定义:HRESULT Open (_bstr_t ConnectionS...

2018-06-02 10:46:23 1817

原创 C++ 11 时间库 chrono

摘要描述事件通常有我们习惯的描述方式有现在是10点33分,10点33分称为时间点,或者说还有两个小时就到中午饭的时候,两个小时被称为时间段,同时需要记录,比如计算机采用高精度石英作为时钟脉搏,因此一般时间有两种表示方式即时间点或者时间段。 c++11提供了chrono库来表示时间,同时提供时间点 time_point,时间段duration和时钟clock三个类来描述时间,通过使用这三个类可...

2018-05-26 11:52:00 3486

原创 Linux学习 -- Makefile

Linux学习 – Makefile什么是makefile什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的programmer,makefile还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义。特别在Unix下的软件编

2018-04-24 08:43:08 175

原创 通过SendMessageTimeOut判断一个窗口是否僵死或者被挂起。

通过SendMessageTimeOut判断一个窗口是否僵死或者被挂起。代码示例DWORD_PTR dwResult = 0; LRESULT lr = ::SendMessageTimeout(g_hWin, WM_NULL, 0, 0, SMTO_ABORTIFHUNG | SMTO_BLOCK, 500, &amp;dwResult); if (lr) { // 还可...

2018-04-11 14:01:42 4830

原创 C语言编程,国际化操作

使用步骤 获取当前区域char* old_locale = _strdup(setlocale(LC_CTYPE, NULL));设置新区域setlocale(LC_CTYPE, "chs");具体操作 还原区域 setlocale(LC_CTYPE, old_locale); free(old_locale);例子 写文件时候,经常出现Unicode无法写入文件或者//写日

2018-02-25 15:06:03 673

原创 C++ STL迭代器 -- 插入迭代器

#include "stdafx.h"#include <iostream>#include <vector>#include <list>#include <algorithm>#include <iterator>using namespace std;int main(){ //c++插入迭代器 vector<int> vInt = { 1,2,3,4,5 };

2017-11-16 12:13:47 531

原创 STL 正则表达式-regex运用

// Algorithm.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include "MainFrame.h"#include <fstream>#include <locale>#include <regex>using namespace std;int main(){ regex rTime("(?:[0]?[0-9]|1[0-9]

2017-11-13 10:32:21 1149

原创 STL算法-归并和最大最小值算法

/* * @ merge * @ 将两个排序好的的集合归并,并保持排序顺序 * @ */ vector<int> vecOne = { 32,26,54,78,92 }; vector<int> vecTwo = { 26,48,4,25,36 }; vector<int> vecRes(vecOne.size() + vecTwo.

2017-11-11 23:55:49 352

原创 STL算法 - 分区与集合算法

//分区拷贝 /* * @ partition_copy * @ 按照谓词讲源集合中满足条件的元素拷贝到第一个集合,不满足的拷贝到第二个集合 */ vector<int> src = { 15,32,36,19,21,85,66 }; vector<int> des1, des2; des2.resize(src.size());

2017-11-11 09:10:57 286

原创 windows 导出模块获取及dos内存结构剖析

include "stdafx.h"#include <iostream>#include <windows.h>#include <string.h>using namespace std;int main(){ HMODULE hMod = ::GetModuleHandle(NULL); //获取dos头 IMAGE_DOS_HEADER *pDosHeader

2017-11-10 08:11:56 305

Select模型搭建200服务器

用线程池技术与select模型构建万人级服务器,针对不同访问实现数据同步,避免混乱,关键词 线程池,select,模型

2017-09-07

IP多播实例

IGMP实现IP多播

2017-06-20

IP广播实例

IP广播,本地子网内计算相互通信

2017-06-19

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除