- 博客(35)
- 资源 (4)
- 收藏
- 关注
原创 自己编写c++代码对软件加密
对一个自己开发的程序进行加密,主要思路是先获取目标机器的机器码(mac地址或者cpu的序列号)。然后写一个简单的加密算法对机器码进行加密,并输出一个license文件。自己开发的程序就读取目标jiq...
2021-06-03 15:49:27
3740
原创 opengl 物体自旋转的实现思路
大致的思路是 先把物体的中心移到(0, 0, 0)处, 然后再根据(pitch yaw roll)进行旋转,最后再把物体的中心移到原来地方gltranlate(-centerX, -centerY, -centerZ);glrotate(pitch, yaw, roll);gltranslate(centerX, centerY, centerZ);这样既可实现物体的自旋转...
2018-05-25 18:05:31
5501
原创 倾斜摄影房屋轮廓线提取思路
博客地址:http://blog.youkuaiyun.com/qq_19408603/article/details/78594460 1. 构建空间数据库,采用父子表形式 2.三角面片以唯一id标识出来,同时加入拓扑关系,三维点信息,法向量信息 轮廓线提取技术路线: 1.屏幕上点击通过碰撞检测获得三维点和tile文件
2017-11-26 12:23:40
2799
原创 分析postgresql中性能优化问题
本人最近利用postgresql 进行空间数据库管理,对postgresql的使用较多,由于数据量很大在建表时候一直想优化生成的速度,下面是我做关于数据库不同操作的性能上的差异。首先谈下插入操作,最简单的是直接insert,接着是多行插入,然后还有建立索引和不建立索引的几种方式。 单行插入 多行插入(1000行)建立索引(2个字段 btree
2017-11-21 17:33:35
1583
原创 XMLHttpRequest作用
XMLHttpRequest 对象是开发者的梦想,因为您能够:在不重新加载页面的情况下更新网页在页面已加载后从服务器请求数据在页面已加载后从服务器接收数据在后台向服务器发送数据jquery toggleclass 用于添加或者移除样式
2017-10-24 13:47:55
603
原创 mfc 内嵌cef浏览器开发
首先第一步在mfc win32 启动线程时候做cef浏览器设置,默认在app 类中的InitInstance()函数,大概是因为cef的配置必须要在winmain刚进来时候就要设置了。太晚了不知道何种原因会启动不了。// CEF InitCefEnableHighDPISupport();void* sandbox_info = NULL;CefMainArgs main_
2017-10-09 19:53:07
1042
原创 osg源码剖析(2)eventTravel事件处理
osg中事件处理本质上是使用win32中的我们非常熟悉的peekmessage获得消息While(peekMessage(hwd, &msg, PM_REMOVE){ translate dispatch}peekMessge 在peek后都会进行让步然后进行dispatch,把消息发送到winproc回调函数中。回调函数调用eventque
2017-09-11 20:33:25
333
原创 osg 源码剖析(一)frame函数剖析
osg 是基于MVC模式进行的。frame函数包含了整个引擎在渲染一帧的过程中所要做的所有事情。这个函数是viewbase的成员函数。对于单视景体和多视景体都是一样。该函数所执行的主要工作如下:1、如果这是仿真系统启动后的第一帧,则执行viewerInit();此时如果还没有执行realize()函数,则执行它。2、执行advance 函数。3、执行eventTravers
2017-09-10 14:50:23
1470
原创 python爬虫下载网站所有文件
核心思路是使用正则表达式对网页的html5中的路径名和文件名进行抓取,然后对路径继续进行同样的抓取,用递归的方式进行搜索。最后把网站上的内容文件全部下载下来import urllibimport sysimport BeautifulSoupimport reimport ospath = []def extract(url):
2017-08-19 16:58:21
8564
原创 python抓取文件批量下载,单目录的情况下
使用python批量下载文件:import urllibimport sysimport BeautifulSoupimport reprint "downloading with urllib"url = 'http://139.196.233.65/js'content = urllib.urlopen(url).read()#reg = r'(?:hr
2017-08-19 16:17:11
495
原创 c++实现引用计数智能指针
主要的思路是使用一个int* 的指针进行计数,在构造函数时候设置为0,并加1(或者直接设置为1)。然后赋值和复制构造时候把int* 和数据保存的指针T* mP传到另外一个类中。在赋值的时候要注意左边的指针是否已经有数据了,有数据就要先-1,然后再进行赋值。templateclass ref1{public: explicit ref1(T* p = NULL) : m
2017-08-19 14:08:48
395
原创 osg 中的修改操控器支持osgb浏览
osg 中提供了terrainManipulator和trackballManipulator两种orbit-base的类进行场景的浏览等方面的操控。他们都是继承自oribtManipulator。里面有三个重要的成员变量:rotaion, distance, center 。距离distance center rotation 都是由eye center up这三个opengl里面的关键设置
2017-08-18 13:39:09
1628
原创 使用stl实现快速排序
快速排序方法思路是:每次使用第一个元素作为分割线,然后对后面的元素进行分割。然后再对分割的两段(左边和右边)再重复之前的方式,选择两小段的第一个元素进行分割,不断迭代,直到完全排序。本文在上述思路下利用stl中的list作为容器,用到了list的splice分割,和算法中的partion算法的实现如下:templatestd::list quicksort(std::lis
2017-08-08 08:48:22
1699
原创 c++ 使用lambda表达式实现闭包
之前在书上看了java使用内部类的方式实现闭包,然后我用c++仿照实现了下,c++没有内部类,所以不得不传入类的指针。这种方式很麻烦,而且没有js的那种类似于静态变量累加的特性,后面发现使用c++ lambda表达式可以达到js的效果。lambda表达式中的&非常有用,可以让作用域扩展到类内所有成员,包括局部和类成员变量。这里的b 尽管是一个局部变量,但是在lambda表达式的作用下,它类
2017-08-08 08:42:43
904
原创 安全线程队列(四)
在前面的基础上,增加条件变量/*** @brief CFineCondQueue 利用自己实现的容器队列* @brief 创建细粒度更高的锁,从而实现并发*/templateclass CFineCondQueue : public CThreadSafeQueue{public: CFineCondQueue() : head(new node),
2017-07-31 12:16:38
250
原创 线程安全队列(三)
利用自己实现的容器结构,链表来实现更加细的锁,从而增强并发性/*** @brief CFineLockQueue 利用自己实现的容器队列* @brief 创建细粒度更高的锁,从而实现并发*/templateclass CFineLockQueue : public CThreadSafeQueue{public: CFineLockQueue(
2017-07-31 12:15:16
220
原创 安全线程队列(二)
在之前的基础上增加了条件变量,相比之前的等待时间减少,处理速度更快/*** @brief CThreadSafeQueue 基于锁和条件变量的线程安全栈* @brief 相对来说比上面设计上不需要过多的加锁等待,速度要更快*/templateclass CCondSafeQueue : public CThreadSafeQueue{private:
2017-07-31 12:13:30
205
原创 线程安全队列(一)
基于锁的安全队列,利用stl的队列进队列和出队列的时候加锁保护/*** @brief 弹出错误信息的栈*/struct CEmptyQueue : std::exception{};templateclass CLockSafeQueue : public CThreadSafeQueue{public: CLockSafeQueue()
2017-07-31 12:11:44
215
原创 c++实现装饰器模式
最近项目面临一个问题如:A* a = new A();a->start();想把start修改了,但是有不想修改a = new A()这一句这时候可以使用装饰器模式,变成如下:AA* a = new AA(); BB* b = new BB(a); b->startA();为了更好的修改AA 里面的protected方法和protected变量,必须BB
2017-07-28 11:28:57
488
原创 模型内存顺序和原子操作顺序(1)
六个原子操作类型:memory_order_relaxed, memory_order_consume,memory_order_acquire, memory_order_release对于acquire 和release, acquire 会等待release x.load 会失败,x.store 必然会先于x.loadvoid write_x_then_y(){
2017-07-26 20:37:52
595
原创 线程之间的先行关系
使用原子操作保证消费者线程和生产者线程的(或者是读写线程的先行关系)这里的data_ready 是原子, while 这里处理的过于抵消了vector data12;atomic data_ready(false);void reader_thread(){ while (!data_ready.load()); cout }void
2017-07-19 12:36:02
220
原创 用多线程进行的序列快速排序
本质上是选择最前面的一个数作为分割线,以此为分割。在此基础上进行迭代,终点关注下使用lambda表达式 [&](T const& t) {return t 然后是使用了partion 和splice两个stl算法里面的代码下面是原始的快速排序代码templatelist sequential_quick_sort(list input){if (input.empt
2017-07-16 19:11:42
1339
原创 python装饰器
第一种形式def decorator(fun): logging.warn("before") fun() logging.warn("after") return fun使用 语法糖@decoratordef fun(): print("ok");上述其实等价于fun = decorator(fun)
2017-07-15 09:38:47
210
原创 面向链接套接字和无连接套接字的区别
流式套接字(SOCK_STREAM):提供了一个面向连接、可靠的数据传输服务,数据无差错、无重复地发送,且按发送顺序接收。内设流量控制,避免数据流超限;数据被看作是字节流,无长度限制。文件传送协议(FTP)即使用流式套接字。 数据报式套接字(SOCK_DGRAM):提供了一个无连接服务。数据包以独立包形式被发送,不提供无错保证,数据可能丢失或重复,并且接收顺序混乱。网络文件系统(NFS)使
2017-07-06 20:57:11
1744
原创 PYTHON 开发 正则表达式
正则表达式:. 表示任何符号 除了\n* 表示匹配前面0次或者多次?表示只重复出现0次或者一次+表示匹配前面1次或者多次()只返回括号内的结果
2017-07-04 12:31:24
181
原创 PYTHON smtp 发送qq邮件
发送qq邮件源码:import smtplibfrom email.mime.text import MIMETextfrom email.header import Headerfrom email.mime.multipart import MIMEMultipartfrom email.mime.application import MIMEApplica
2017-06-21 22:20:16
291
原创 多线程学习(四)
boost::shared_mutex 这个配合boost::shared_lock类这个相当于读锁嵌套锁不是一个很好的选择,尽量尝试更改数据结构条件和期望线程会等待一个特定事件等待
2017-06-03 16:24:49
227
原创 多线程学习(三)
1. 进程有状态,单线程进程的状态与主线程的状态同义2. 如果主线程挂起,则进程挂起3. 单如果进程拥有多个线程,则所有线程阻塞,只有一个激活,则是激活。让进程挂起,则所有线程挂起线程的实现模型:用户线程,核心级线程,混合线程核心线程由操作系统管理,进程可以有多个线程posix_spawn 创建多进程,用多个cpu来缩减任务pthread_create 进行创建
2017-06-03 12:49:11
156
原创 避免死锁的进阶指导
1.第一个线程已获得锁,在别去获取第二个,当需要多个锁的时候使用std::lock来处理2. 避免使用用户提供的代码去锁3. 使用固定顺序获取锁
2017-05-31 22:28:40
162
原创 多线程学习(二)
线程是一个轻量级的进程。线程给操作系统带来的开销要轻当从处理器删除一个进程并激活另外一个进程,就发生上下文切换。线程没有地址空间,就包含在进程的地址 空间,线程上下文一个堆栈、一个寄存器和一个优先权线程和进程的不同:线程没有地址空间父和子进程必须使用进程间通信机制,同一进程的线程通过读取和写入数据写到进程变量来通信。线程可以相互进行控制,进程间不能施加控制子进程
2017-05-30 18:15:03
228
原创 多线程学习(一)
进程:一旦程序被装载到了内存并准备执行时候,它是一个进程。进程具备文本、数据、堆栈片段、以及自己的资源(文件、对象句柄、设备、信号量、互斥量、管道)进程优先权:系统中使用了优先权方案决定就绪进程使用处理器顺序。进程被分配一个优先类以及该类中的最高级优先级开始 上下文切换进程的时间段用完一个等待或新建进程准备就绪,而且已经选用处理器运行进程的分配处理器发生了变化运
2017-05-30 17:51:37
180
原创 阅读effective stl 有感(二)
stl的条款:1. 容器里容纳的对象是通过拷贝复制构造函数进行复制的结果,考进去,然后拷出来。以基类对象建立一个容器,而试图插入派生类,那么派生类对象通过拷贝构造函数到容器中时候,派生类部分会被删掉,所以需要建立指针容器。2. 用empty来检查size为0。empty是一个常数时间的操作,但对于一些list实现,size花费线性时间。3. 尽量使用区间成员函数代替它们的单元素兄弟,尽
2017-04-22 16:00:17
173
原创 阅读effective stl 有感(一)
当读到这本书的时候这有种相见恨晚的感觉啊! 边读以前写过的一行行stl代码就在自己的脑海中浮现。下面我一条条总结我读stl的感想:第一条:善用typedef之前的访问者模式例子其实可以使用typedef 来写出节省修改类型时间的代码前面的范围,由于我使用的是osg::bouindgbox 使得我的代码依赖于osg,但是很多人不使用osg。后面我就利用typedef重写了一遍
2017-04-22 15:55:43
349
原创 运用访问者模式把四叉树遍历和实现分离
四叉树是一种常用的空间分割技术,主要用于地形的瓦片,创建三维模型的lod等。废话少说,直接上代码:被访问者:这里我们把访问的总体空间进行抽象。用户在构造函数中需要输入范围和分层的级数这里的osg::bouidngbox 是osg里面的类,用户也可以自定义自己的范围类,如下例子class CBoudingBox{public: double xMin;
2017-04-21 12:20:33
449
原创 OSG 旋转矩阵和四元素 欧拉角
osg中需要对节点进行旋转,是通过matrixtransform节点来进行。osg在描述旋转时候一般通过osg::matrix来描述。比如: osg::vec3d pt(10, 0, 0);通过乘法可以进行对点的旋转。 pt = pt * matrix; matrix 里面除了含有旋转,还包含了缩放,平移它的含义如下:1 0 0 00 1 0 0
2017-04-10 12:18:46
4874
1
淘宝购物车商品自动定时购买程序.rar
2019-11-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人