- 博客(34)
- 收藏
- 关注
翻译 C++ jsoncpp解析json字符串
使用方法下载源码解压之后得到jsoncpp-src-0.5.0文件夹,我们只需要jsoncpp的头文件和cpp文件,其中jsonscpp的头文件位于jsoncpp-src-0.5.0\include\json,jsoncpp的cpp文件位于jsoncpp-src-0.5.0\src\lib_json。json: json操作所需的头文件,此文件夹名字不能修改,因为lib_json目录中所对应的.
2017-11-08 14:45:11 7530 1
翻译 tinyxml2库的使用
TinyXML2概述TinyXML2是simple、small、efficient开源的C++ XML文件解析库优点:(1)对大部分的C/C++项目具有普适性。(2)使用较少的内存,速度变得更快。(3)没有C++的STL要求。(4)更接近现代C++的特性,使用了适当的名称空间。(5)适当有效处理了空白字符。使用方法:将tinyxml2.cpp和tinyxml2.h拷贝至项目目录,使用时包含#in
2017-11-08 09:16:52 1221 1
翻译 libcurl库的使用
libcurl库的使用libcurl是一个跨平台的网络协议库,支持http, https, ftp, gopher, telnet, dict, file, 和ldap 协议。libcurl同样支持HTTPS证书授权,HTTP POST, HTTP PUT, FTP 上传, HTTP基本表单上传,代理,cookies,和用户认证。 在基于LibCurl的程序里,主要采用callback funct
2017-11-07 16:06:56 323
原创 1.Android数据库的创建以及添加数据
创建数据库:public class MyDatabaseHelper extends SQliteOpenHelper{} (1)创建数据库主要借助于辅助类SQLiteOpenHelper。使用时继承该类并实现方法onCreate()和onUpgrade()。 (2)两个方法,getReadableDatabase()和getWritableDatabase()。这两个方法可以创建或打开一个现
2016-10-18 06:32:59 1300
原创 Windows核心编程:内存体系结构
1. 进程的虚拟地址空间 每个进程都有自己的虚拟进程空间,对32位进程来说,这个地址空间的大小为4GB。因为32位指针可以表示从0x00000000到0xFFFFFFFF之间的任一值。每个进程都有字节专有的地址空间,当进程中的各线程运行时,它们只能访问属于该进程的内存。线程既看不到其他进程的内存,也无法访问它们。 虚拟地址的分区:空指针赋值分区,用户模
2015-03-20 08:46:01 467
原创 Windows核心编程:(六)用内核对象进行线程同步
内核对象的唯一缺点是它们的性能,每一个应用内核对象的新函数,调用线程必须从用户模式切换到内核模式。 这种切换时非常耗时的,一个空的系统大概会占用200个CPU周期,但是造成内核对象比用户模式下的同步机制慢几个数量级的原因,是伴随调度新线程而来的刷新高速缓存以及错过高速缓存。 进程内核对象在创建的时候总是处于未触发状态。当进程终止的时候,操作系统自动使进程内核对象变成触发
2015-03-13 14:40:46 420
原创 Windows核心编程:(五)用户模式下线程同步
(1)原子访问:Interlocked系列函数 该系列的函数会保证对一个值得递增操作是原子操作,即不会被打断。(2)高速缓冲行当CPU从内存中读取一个字节的时候,它并不是从内存中取回一个字节,而是取回一个高速缓冲行。高速缓冲行存在的目的是为了提高性能。一般来说,应用程序会对一组相邻的字节进行操作,如果所有字节都在高速缓冲中,那么CPU就不必访问内存总线,后者耗费的时
2015-03-12 10:53:03 453
原创 Windwos核心编程:(四)线程调度,优先级和关联性
每个线程都有一个上下文(CONTEXT),后者保存在线程的内核对象中。这个上下文反映了线程上一次执行时CPU寄存器的状态。大约每隔20ms,Windows都会查看所有当前存在的线程内核对象,Windows在可调度的线程内核对象中选择一个,并将上次保存在线程上下文中的值载入CPU寄存器。 线程执行代码,并在进程的地址空间中操作数据。又过了20ms,Windows将CPU寄
2015-03-12 08:56:34 670
原创 Windwos核心编程:(三)线程
线程有两个组成部分:(1)线程的内核对象,操作系统用它来管理线程(2)线程栈,用于维护线程执行时所需的所有函数参数和局部变量。线程只有一个内核对象和一个栈,线程描述了进程内部的一条执行线路,每次初始化线程时,系统都会创建一个主线程。系统从进程的地址空间中分配内存给线程栈使用,新线程在与负责创建的那个线程在相同的进程上下文中运行。因此,新线程可以访问进程内核对象的所有句柄,进程中的所有内
2015-03-11 15:42:05 325
原创 Windows核心编程:(二)进程
一,一般将进程定义成一个正在运行的程序的一个实例,有以下两部分构成:(1)一个内核对象,操作系统用它来管理进程。(2)一个地址空间,其中包含所有可执行文件或DLL模块的代码和数据,还包含动态内存分配,(比如线程堆栈和堆的分配)二,进程是有惰性的。进程要做任何事情,都必须让一个线程在它的上下文中运行。该线程负责执行进程地址空间中包含的代码。一个进程可以有多个线程,所有线程都在进程
2015-03-11 11:18:56 438
原创 Windows核心编程:(一)内核对象
一:何为内核对象 每个内核对象都只是一个内存块,它由操作系统内核分配,并只能由操作系统内核访问。这个内存块是一个数据结构,其成员维护着与对象相关的信息。二:使用计数 每个内核对象都包含一个使用计数,初次创建一个对象的时候,其使用计数被设为1.另一个进程获得对现有内核对象的访问后,使用计数就会递增;进程终止,操作系统内核自动递减打开的所有内核对象
2015-03-11 11:13:21 765
原创 用户模式下线程同步
原子访问:指的是一个线程在访问某个资源的同时能够保证没有其他线程会在同一个时刻访问同一资源。函数一:InterlockedExchangeAdd原型 LONG InterlockedExchangeAdd(PLONG volatile plAddend, LONG lIncrement);调用这个函数,传一个长整形变量的地址和另一个增量值,函数就会保证递增操作是以原子方式进行的。高
2015-03-06 15:23:47 452
转载 C++ 虚函数表解析
前言 C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。 关于虚函数
2015-03-05 16:22:03 385
原创 进程间通信机制(IPC)
1. 信号机制 主要用于向一个或多个进程发异步事件信号,信号可以通过键盘中断触发,也可以有进程访问虚拟内存中不存在的地址这样的错误来产生。信号机制还可以用于shell向它们的子进程发送作业控制命令。Linux使用存贮在每个进程task_struct结构中的信息实现信号机制,它支持的信号数受限于处理器的字长,32位字长的处理器有32种信号。并不是系统中的每个进程都可以向其他
2015-01-26 19:00:39 308
原创 Linux进程
概念:进程是执行操作系统中的任务。1. 在进程的生存期内将使用许多系统资源:使用系统的CPU来运行自己的指令;使用系统的物理内存来保存自己和自己的数据;打开和使用文件子系统中的文件并直接或间接地使用系统中的物理设备。2. 每一个进程通过一个task_struct数据结构表示,其字段可分为几个功能区:(1)状态,随环境改变:有运行,等待,停止,死亡。(2)调度信息:调度器需要这些信息
2015-01-26 15:33:50 346
原创 内存管理子系统
内存管理子系统提供一下功能:1. 大地址空间 操作系统使系统显得它有比实际上大得多的内存。2. 保护 系统中每个进程有自己的虚拟地址空间,运行一个应用的进程不能影响其他的进程。3. 内存映射 内存映射用来把映像和数据文件映像到一个进程的地址空间。在内存映射中,文件的内容被直接链接到进程的虚拟地址空间。4. 公平物理内存分配 内
2015-01-23 18:33:47 753
原创 echo命令的输出方式
echo是用于终端打印的基本命令, 在默认情况下,echo在每次调用后会添加一个换行符。(1)用双引号$ echo "Welcome to Bash"Welcome to Bash(2)不带双引号$ echo Welcome to BashWelcome to Bash(3)使用单引号$ echo ‘Welcome to Bash’Welcome to Bash
2015-01-21 20:38:36 1584
原创 查询需要扫面大量行却只返回少量行解决方法
1. 使用索引覆盖扫描,把所有需要用的列都放到索引中,这样存储引擎无须会表获取对应行就可以返回结果了2. 改变库表结构3. 重写这个复杂的查询,让MySQL优化器能够以更优化的方式执行这个查询。
2014-12-03 17:36:52 868
原创 使用MySQL正则表达式
1. [ ] 是另一种形式的OR语句 [123] 值匹配1或2或3SELECT prod_name FROM products WHERE prod_name REGEXP '[123] Ton'[^123]匹配除这些字符外的任何动西匹配范围[1-9]匹配1到9的数2. \\ . 表示查找 .SELECT vend_name FROM vendors WHERE vend_
2014-12-01 22:48:59 351
原创 一些sql语句
1. limit限制返回的行数,例:SELECT prod_name FROM products LIMIT 5; 指示MySQL返回不多于5行LIMIT 5, 5指示MySQL返回从行5开始的5行。第一个数为开始位置,第二个数为要检索的行数。行0 检索出来的第一行为行0而不是行1.因此,LIMIT 1,1将检索出第二行而不是第一行。2. SELECT * FROM pr
2014-12-01 21:00:18 389
原创 MySQL客户端/服务器通信协议
MySQL客户端和服务器之间的通信协议是“半双工”的,这意味着,在任何一个时刻,要么是由服务器向客户端发送数据,要么是由客户端向服务器发送数据,这两个动作不能同时发生。客户端用一个单独的数据包将查询传给服务器。这也是为什么当查询的语句很长的时候,参数max_allowed_packet就特别重要了。一旦客户端发送了请求,它能做的事情就只是等待结果了。相反的,一般服务器响应给
2014-11-28 11:10:44 3781
原创 sql语句
经典SQL语句大全一、基础1、说明:创建数据库CREATE DATABASE database-name 2、说明:删除数据库drop database dbname3、说明:备份sql server--- 创建 备份数据的 deviceUSE masterEXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7ba
2014-11-28 09:12:35 284
原创 哈希索引
哈希索引基于哈希表实现,只有精确匹配索引所有列的查询才有效。对于每一行数据,存储引擎都会对所有的索引列计算一个哈希码,哈希码是一个较小的值,并且不同键值的行计算出来的哈希码也不一样。哈希索引将所有的哈希码存储在引擎中,同时在哈希表中保存指向每个数据行的指针。哈希表的限制:1. 哈希索引只包含哈希值和行指针,而不存储字段值,所以不能使用索引中的值来避免读取行。2. 哈希索引数据并
2014-11-27 09:20:29 765
原创 MySQL事务
1. 事务就是一组原子性的SQL语句,或是一个独立的工作单元。2. 事务内的语句,要么全部执行成功,要么全部执行失败。3. 事务具有严格的ACID测试:ACID表示原子性(atomicity),一致性(consistency),隔离性(isolation),持久性(durability).4. 原子性:一个事务必须被视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部成功,要么
2014-11-21 16:51:53 365
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人