- 博客(25)
- 收藏
- 关注
原创 UE4创建自定义Module
任何一名C++程序员,一定被C++的项目配置所困扰过。你需要添 加头文件目录、lib目录等。还需要对Debug模式、Release模式下不同的 包含做出控制。这是相当复杂的一个问题。更不用说对于虚幻引擎来 说,需要的编译模式远远不止这么几种。在编辑器模式下,有些类会被 引入,在最终发布的游戏中,这些类又完全不再需要,如何处理这样的 问题呢? 在虚幻引擎3的时代,使用MakeF...
2020-02-26 15:06:39
1704
1
原创 C++并发与多线程-线程之间传递任务
线程之间传递回调函数或者任务的一种方法是使用std::packaged_task封装可调用对象,然后将std::packaged_task对象放入公共容器里面,然后被调用任务的线程持到std::packaged_task里面的future对象,当需要数据的时候调用future对象的get()或wait()方法即可阻塞并等待。执行任务的线程执行完可调用对象之后,该future就变为可获...
2020-02-02 23:52:48
699
原创 C++并发与多线程-使用读写锁
使用读写锁的好处是所有的读操作都能同时进行,而写操作需要独占互斥量。这样能保证读操作不会相互阻塞等待。而他们的共同竞争者是那些独占互斥量的写操作。标准模板库中提供了std::shared_lock(共享锁)和std::shared_mutex(共享互斥量)。而阅读源码可以看到,shared_lock再构造的时候其实调用互斥量的lock_shared()函数。template<class...
2020-01-14 00:10:54
1335
原创 C++并发与多线程-使用层次锁防止死锁
为防止死锁,其中一种简单的办法是顺序的加锁。而使用层次锁可以减轻程序员的负担,检查运行时是否遵循了约定。其思路是将应用程序分层,当代码试图锁定一个互斥元的时候检查当前线程是不是已经有一个比较低级的互斥元在锁的状态了。因此锁的顺序只能先锁层级高的锁再锁层级低的锁。//hierarchical_mutex.h文件#pragma once#include <mutex&g...
2020-01-12 20:08:47
1588
原创 C++并发与多线程-运行时选择线程数量
使用std::thread::hardware_concurrency() 来获得当前系统可以真正并发的线程数量,和cpu的核心数有关。#include <iostream>#include <thread>#include <numeric>#include <vector>#include <algorithm>#in...
2020-01-07 00:46:24
1415
原创 AVL树删除操作
AVL树的删除操作: 删除操作分几种情况: 1.如果要删除的节点时NULL 则直接返回NULL。 2.如果删除的节点不为NULL,需要判断要删除的值是否等于当前节点。如果大于,则递归去删除当前节点的右子树。 3.如果删除的节点不为NULL,且要删除的值小于当前节点的值,则递归删除当前节点的左子树。 4.如果删...
2019-11-25 14:22:34
1401
原创 AVL树的插入与输出
概念引用:https://www.cnblogs.com/zhuwbox/p/3636783.htmlAVL树: AVL树本质上是一颗二叉查找树,但是它又具有以下特点:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。在AVL树中任何节点的两个子树的高度最大差别为一,所以它也被称为平衡二叉树。下面是平衡二叉树和非平衡二叉树对比的例图: ...
2019-11-23 21:32:58
2257
原创 【Unity Shader】菲涅尔反射
Shader "Unlit/FresnelCubMapShader"{ Properties { _Texture("Texture", 2D) = "white"{} _Color("Color", Color) = (1,1,1,1) _CubeMap("CubeMap", Cube) = "skybox" {} ...
2019-05-09 22:42:42
648
原创 NGUI源码剖析之提高GPU性能
一.使用NGUINGUI和UGUI比起来我更喜欢NGUI,因为NGUI可将图片打成图集,而且它和texturepacker配合使用会十分的方便,高效。texturepacker导出一张合图和一个文本,使用NGUI创建一个Atlas,拖拽上去即可。二.NGUI性能提升。首先来一段源码:这是UIPanel里面的代码。void FillAllDrawCalls () { for (
2017-07-21 21:10:33
412
原创 Unix网络编程之epoll函数模拟10万客户端链接服务器
1.epoll函数是Linux内核为处理大批量文件描述符而作了改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。另一点原因就是获取事件的时候,它无须遍历整个被侦听的描述符集,只要遍历那些被内核IO事件异步唤醒而加入Ready队列的描述符集合就行了。epoll除了提供select/poll那种IO事
2016-10-09 19:32:33
2564
原创 Unix网络编程之poll函数实现服务器反射客户端-server.c
1.poll 函数:int poll(struct pollfd *fds,nfds_t nfds,int timeout); 其中第一个参数表示struct pollfd 结构体的数组,struct pollfd 的结构体如下:struct pollfd{ int fd; short events; short revents;}
2016-09-29 20:33:59
876
原创 Unix网络编程之给阻塞式函数设定超时限定
1.给read函数设定超时时间。代码:int read_timeout(int fd,unsigned int wait_seconds){ int ret = 0; if(wait_seconds > 0){ fd_set set; struct timeval timeout;
2016-09-29 17:11:17
478
原创 Unix网络编程之readline函数
1.为什么要使用readline函数?首先我们先考虑一下网络字节流传递消息的时候的黏包问题,我们之前的解决办法是将存放消息的buf定义成一个结构体,里面有一个len成员用来记录下一次我要发送多少个字节的消息。我们可以再想一种方法,我们把消息之间用一个标识符隔开,这样每个包之间就可以分离开来。比如我们可以像ftp那样用一个‘/r/t‘隔开。2.使用readline需要注意的地方:首先我们先用re
2016-09-26 19:19:03
1860
原创 Unix网络编程之服务器回射客户端多线程编程02-server.c client.c
知识点:1.在网络传输中,如果使用TCP传输协议传输内容,由于TCP是以字节流的形式进行传输的,而且在TCP传输层的分节在传到IP层的时候会被拆分(如果发送的比较多的话),而且IP数据报在再往下传送的时候由于数据链路层的MTU只有1500个字节,因此IP数据报会再被分成数据帧,虽然有帧的概念,但是tcp以流的形式进行传输,而且发送的数据具有时间随机性,就是说在任何一段时间有可能发送了好几帧。接
2016-09-25 20:44:33
692
原创 Unix网络编程之点对点聊天-客户端与服务器实现
1.点对点聊天主要实现一个客户端与一个服务器端的通讯模型。2.点对点聊天的实现需要服务器和客户端都得有至少两个进程来实现,一个用来发送给对方,一个用来接收对方发送的消息。3.设计阶段需要考虑当进程结束了,或者接收到来自对方的FIN,应不应该通知其他进程,当进程结束了不要忘了break 退出循环。代码: server.c#include#include#include#
2016-09-25 10:47:57
798
原创 Unix网络编程之服务器回射客户端多线程编程01-server.c
1.实现服务器的多线程编程的重要函数时fork(),该函数会重新建立一个进程,原来的进程执行的任务会复制到新的进程中来,而这个新的进程 就是原来的进程的子进程。2.新建立的子进程主要用来和客户端进行通讯。是对connfd套接字描述符来进行操作的。而父进程主要用来接受新来的客户端并通过fork为新来的客户端建立一个新的进程的。3.父进程和子进程都共用一个套接字。仅仅关闭一个进程,套接字的描述
2016-09-23 17:52:09
884
原创 Unix网络编程之回射客户端-client.c
1.定义socket。2.connect。3.输入文本,写入socket。4.从soctet 读出数据,放入缓冲区。5.输出到屏幕上。6.close 套接字。代码:#include#include#include#include#include#include#include#include#define ERR_EXIT(m)\
2016-09-23 15:27:00
562
原创 Unix网络编程之回射客户端文本-server.c
1.定义socket,2.bind。3.listen。4.accept。5.close。直接上代码:#include#include#include#include#include#include#include#include#include#define ERR_EXIT(m)\ do\ {\
2016-09-23 15:19:32
435
原创 Unix网络编程之select版客户端实现
1.当客户端阻塞于某个输入操作时,服务器发送过来的终止连接的消息或者服务器崩溃的FIN,客户端将接受不到,而客户端以为服务器还在正常运行,一味的给服务器发消息。那么客户端将收到一个RST,但是客户端正忙于其他操作,忽略了这个RST,客户端继续调用read方法,如果read方法调用发生在RST到来之前,将返回一个0(EOF),否则返回一个ECONNRESET(对方复位连接错误),最终退出程序。2
2016-09-19 19:37:17
635
原创 Unix网络编程之select实现服务器端程序
1.先看一下select 函数原型:#include#includeint select (int maxfdp1,fd_set *readset, fd_set *writeset,fd_set *exceptset,const struct timeval *timeout);其中,maxfdp1 是select 所要监听的最大描述符,所谓描述符就是一些 int 型的id值,比
2016-09-19 17:55:10
406
原创 unity3d之工程性能提升注意点
Unity开发上与“效能”相关,需要注意的“关键点”:1.暂存常用的Component:根据官方文件的描述,每次GetComponent的呼叫,Unity都会花点时间寻找所要求的object上。要省下这点时间,建议利用Private变数在Object Awake时,将常的用component暂存下来。2.不要在任何Update的function内,使用Find:GameOb
2016-04-23 14:27:51
430
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人