自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 收藏
  • 关注

原创 Lua表

Lua表表的数据结构:数组+哈希表(链地址法)typedef struct Table { CommonHeader; lu_byte flags; /* 1<<p means tagmethod(p) is not present */ lu_byte lsizenode; /* log2 of size of 'node' array */ unsigned int alimit; /* "limit" of 'array' array */ TValue *a

2020-11-18 15:56:54 395

原创 Lua字符串

Lua字符串数据结构:lobject.h存储结构:lstate.h短字符串(LUAI_MAXSHORTLEN 40)保存lua_state中的strt表中,即stringtable。如果创建一个新的短字符串,首先会从strt中查找是否含有该字符串,有就马上返回,没有就创建一个新的字符串对象存入哈希表中,采用链地址法;长字符串不保存到表里,每次创建新的对象返回。创建字符串:lstring.c创建短字符串:lstring.c创建长字符串:lstring.c创建字符串对象:总结.

2020-11-17 11:57:27 464

原创 Lua内存管理器

Lua内存管理lua允许用户自定义内存管理器,也可以使用默认的内存管理器l_allocl_alloc函数实际是调用C标准库中的realloc函数进行分配内存。分配内存使用luaM_realloc_函数,释放内存使用luaM_free_函数,都是调用l_alloc,只是nsize的值不一样,为0时释放内存ud:用户可以在自定义内存管理器中,设置内存管理器在不同的堆上,避免线程安全问题,可以让内存管理器工作更高效ptr:返回分配的内存指针,如果nsize为0,返回NULLosize:给出内存块的原始

2020-11-16 16:11:51 674

原创 Skynet:timer线程

Skynet:timer线程timer数据结构:skynet_timer.c创建timer线程:create_thread(&pid[1], _timer, m)线程函数:更新skynet时钟,2.5毫秒更新一次更新逻辑:skynet_timer.c更新时间,计算diff的差值,更新current_point,调用timer_update执行真正的timer处理timer_execute触发定时器,向对应的服务发送消息,完成定时器的逻辑,定时器精确到10毫秒

2020-11-05 22:10:36 384

原创 Skynet:worker线程

Skynet:worker线程创建worker线程:skynet_start.c每个工作线程配置不同的权重,即每次从服务消息队列中取的消息数量不同,可以减少全局消息队列上锁的频率,提高服务器的并发,同时能防止某些服务饥饿工作函数:不断调用skynet_context_message_dispatch函数进行派发消息消息派发机制:skynet_server.c从全局消息队列取一个服务的消息队列,根据工作线程的权重大小处理相应数量的消息。根据消息队列的handle获取服务的上下文,通过dipa

2020-11-05 21:20:11 291

原创 Lua:pair与ipairs的实现

Lua:pair与ipairs的实现tbl = {1, 2, 3, 4}local ipairsIter = function(tbl, index) index = index + 1 local value = tbl[index] if value then return index, value endendlocal ipairsOpt = function(tbl) return ipairsIter, tbl, 0endfor k, v in

2020-11-05 16:56:43 514

原创 Skynet:socket线程

Skynet:socket线程socket应用层t数据结构socket服务层数据结构控制命令请求包结构创建线程:create_thread(&pid[2], _socket, m);工作函数:_socket不断调用skynet_socket_poll函数,处理socket消息,进入socket服务循环调用socket_server_poll取相关消息,根据返回类型进行派发消息,发送到对应服务的消息队列里面,forward_message逻辑如下,其中sky

2020-11-05 16:49:09 325

原创 Skynet: monitor线程

skynet: monitor线程数据结构:kynet_monitor.c创建线程: create_thread(&pid[0], _monitor, m);工作流程:skynet_start.cmoniter 线程每5秒检测每个工作线程是否能及时处理消息版本更新:skynet_server.c工作线程在派发消息前会触发监视器,使版本号加1;工作线程处理完消息后会再次触发监视器,重置distination为0版本检测:skynet_monitor.c如

2020-11-05 16:18:55 313 1

原创 Lua实现基本的排序算法

洗牌算法function randomSort(nums) local n=#nums for i=1,n do local k=math.random(1,n) nums[i],nums[k]=nums[k],nums[i] endend选择排序function selectSort(numbers) local n=#numbers for i=1,n d...

2019-11-19 14:53:02 481

原创 IPv4头部和IPv6头部

IPv4:IPv4数据报。头部大小可变,4位的IHL字段被限制为15个32位字(60)字节。一个典型的IPv4头部包含20字节。源地址和目的地址的长度位32位。第二个32位字的大部分用于IPv4分片功能。头部校验和有助于确保头部字段被正确发送到目的地。 IPv6:IPv6头部大小固定(40字节),并包含128位源地址和目的地址。下一个头部字段能用于说明IPv6头部之后其他扩...

2018-07-23 17:25:22 17377

原创 以太网帧格式

前导字段:接收器电路用它确定一个帧的到达时间,并确定编码位(称为时钟恢复)之间的时间量。以太网是一个异步的局域网(即每个以太网接口卡中不保持精确的时钟同步),从一个接口到另一个接口的编码位之间的间隔可能不同。前导是一个公认的模式(典型值为0xAA),在发现帧起始分隔符(SFD)时,接收器使用它“恢复时钟”。SFD的固定值0xAB。基本帧格式:包括48位(6字节)的目的地址(DST)和源地址...

2018-07-22 15:21:36 8003

原创 基本的IP地址结构

IPv4地址IPv4采用点分四组或点分十进制表示,例如:165.195.130.107.点分四组表示法由四个用点分隔的十进制数组成,每个数字是一个非负整数,范围为[0,255],代表整个IP地址的四分之一。在很多情况下,我们更关注IPv4地址的二进制结构,例如点分四组表示的10.0.0.255,二进制表示为:00001010  00000000  00000000  11111111。IP...

2018-07-20 16:07:31 6589

原创 王者荣耀服务端

分享要点服务器框架 通信方式 同步方案 暴击同步服务器框架基本的框架:框架描述:PVP对战不分服,信息分区。微信1区可与微信2区一起PVP,ios平台可与Android平台的玩家一起PVP。保留分区的感念,英雄、信息、排位榜、站队等是基于区的概念。房间对战系统,在线广播单元不确定性、广播数量很少,需要匹配一台房间服务器让10个玩家进入一个服务器。 一般的逻辑就是...

2018-07-18 22:17:33 8070

原创 Python爬虫 微信好友分析与自动回复

Python爬虫项目环境1.运行平台:Windows2.Python版本:Python3.63.IDE:Sublime Text3项目知识点1.python爬虫的基本知识2.一些可视化工具的使用(pyecharts)3.python图片工具PIL库的使用4.自然语言处理工具包结巴分词的使用5.微信网页api工具itchat的使用项目的功能1.统计好友的性别,并在扇形图中表示2.统计好友的昵称,并做...

2018-06-28 16:23:29 1425 1

原创 Qt5.8连接MySql QSqlModel与QTableView不能更新中文数据以及中文乱码的问题

问题如下:这里中文显示乱码,是因为MySql数据库的创建默认的编码格式是uf8,排序规则是utf8_general_ci。如果仅仅解决这个中文显示问题,可以重新设置数据库编码格式:utf8,排序规则:utf8_bin 就可以了。进一步问题:当尝试把数据更新为中文数据时,会报以上错误,但更新为英文数据是可以的。这里是编码的问题,虽然MySql和Qt都设置utf-8编码格式,但是还会出现这样的错误,不...

2018-06-09 11:24:58 1488

原创 WIN10安装MySQL出现错误2503 2502 的解决办法!

1. 打开任务管理器:Ctrl+Alt+Del。     2. 点击任务管理器左上角的文件按钮:           3. 再点击 运行新任务(n)按钮。      4. 手动输入所下载的MySQL安装文件的地址+文件名。比如我放在D:\MySQL文件夹里,文件名为:mysql-installer-web-community-5.7.21.0.msi,就输入:D:\

2018-01-21 21:37:33 7858 8

原创 旅游问题

设计一个程序,找出游览的最短路线,要求每个城市都要经过且不重复,每个城市都位于矩形网格的点上。假设为M*N的网格,当网格的个数为偶数时,最短的路线为M*N;当网格的个数为奇数时,最短的路线为M*N+0.41,应为要多走一条对角线。include<iostream>using namespace std;int main(){ int iCase; //测试例数 cin

2017-04-02 19:19:43 276

原创 文章标题

扑克牌的洗牌和分发假设有一副扑克牌,包含52张牌,模拟洗牌和分发的过程,编写程序实现这个过程,并输出相应的结果。 本问题可以进一步拓展: 1.加上大王、小王,共计54张牌,实现相应的过程。 2.共计4副牌,分发给4个人,或者6个人,或者8个人,实现相应的过程。注意,多副牌分发给多个人时,可能出现每一个人的牌的数量不一样。 3.分发给每个人一手牌后,增加理牌,分别按照面值、或者花色进行理牌(即

2017-03-29 23:18:03 268

原创 面向对象:求最大值

C++:以面向对象的方式求几个数的最大值,程序中包含类的定义,对象的初始化,构造函数和析构函数#include<iostream>using namespace std;class MyClass{private: int value;public: MyClass(int i) //构造函数 { value=i; cout<<"C

2017-03-28 19:02:19 759

原创 矩阵的加法和乘法

编写一个矩阵的加法函数、一个矩阵的乘法函数,然后调用函数计算矩阵的和与积,并输出。 为了使函数更加通用,本次课程设计使用一维数组来存放矩阵。问题的关键是如何将一维数组与二维矩阵的元素之间建立对应关系。 问题拓展: 1、增加求矩阵的转置、求矩阵的秩、求正方阵的行列式,求矩阵的鞍点元素的位置与值。 2、将矩阵进行初等变换,行初等变换、列初等变换,变换成上三角矩阵或下三角矩阵。#include<i

2017-03-27 18:39:28 3418

原创 计算一行单词的个数

#include<iostream>#include<string.h>using namespace std;class MyString{private: char *str;public: MyString(const char*s) { str=new char[strlen(s)+1]; strcpy(str,s);

2017-03-01 13:07:27 333

原创 将字符串反转输出

#include<iostream>using namespace std;class MyString{private: char * str;public: MyString(const char *s) //构造函数; { str=new char[strlen(s)+1]; strcpy(str

2017-02-26 10:24:48 407

原创 C++输出空心三角形

#include<iostream>using namespace std;void main(){ int i,j,n; cout<<"输入一个数:"<<endl; cin>>n; for(i=1;i<=n;i++) { for(j=1;j<=2*n-1;j++) { if(i+j==n+1||j

2017-02-25 16:53:30 9298 3

原创 C++ 输出各种图形

等腰三角形 #include<iostream>using namespace std;void main(){ int n=9; for(int i=1;i<=10;i++) //定义三角形的层数; { for(int j=1;j<=n;j++) //控制输出

2017-02-22 23:47:32 19125 3

原创 C++ 输出10000内的素数

(1)简单程序: “`includeusing namespace std; int main() { int i,j,k=0,num=0; for(i=0;i<=10000;i++) { for(j=2;j<=i;j++) //判断是否为素数; if(i%j==0) {

2017-02-21 13:03:34 6525

原创 文章标题

求一个字符串是否为回文数:

2017-02-21 11:31:25 194

原创 文章标题

C语言 求一个正整数的各位数字之和: #include <stdio.h>int func(int num){ int s=0; do { s+=num%10; num/=10; } while(num); return(s);}void main(){ int n; printf(

2017-02-21 11:23:03 198

原创 文章标题

文件包含的函数prime(n)的功能是判断正整数n是否为素数。采用的方法是:若n是素数,则n不能被2~根号n的任意数整除。 #include <stdio.h>#include <math.h>bool prime(int n) //判断正整数n是否为素数{ int i; for (i=2;i<=(int)sqrt(n);i++)

2017-02-21 11:12:07 230

空空如也

空空如也

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

TA关注的人

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