自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(19)
  • 资源 (9)
  • 收藏
  • 关注

原创 Rector模式和Proactor模式

在高性能的I/O设计中,有两个比较著名的模式Reactor和Proactor模式,其中Reactor模式用于同步I/O,而Proactor运用于异步I/O操作。在比较这两个模式之前,我们首先的搞明白几个概念,什么是阻塞和非阻塞,什么是同步和异步。同步和异步是针对应用程序和内核的交互而言的。同步指的是:同步指的是用户进程触发IO操作并等待或者轮询的去查看IO操作是否就绪,由用户进程自己触发自己去

2015-03-13 16:06:16 1286

原创 引用计数

引用计数这项技术,允许多个等值对象共享同一个实值。当对象运用了引用计数,它便拥有了自己,一旦不在有人使用它它便自动的销毁(听起来是不是很像智能指针,是的在std::tr1::share_ptr里的确用到了引用计数)。引用计数构建出了垃圾回收机制的一个简单形式。        产生一个引用计数的类并不难,但是要注意细节。产生数据共享的情况最有可能的就是这两种:拷贝构造、赋值运算符,所以要实现

2015-01-21 15:57:07 550

原创 Linux简单日志系统

本文只讨论单线程,文本类型的日志,其实Linux下有许多优秀的开源的效率很高的日志库,例如log4cplus等。我不敢说自己的实现要比它们更好,但是这至少是给了一些想自己实现日志功能的人一些更多的选择。       谈到日志,一开始我们就会想到是直接将日志信息一条一条的写入到文件中,利用直接的I/O操作。但是只要你稍稍一考虑你就会发现这是一个糟糕的做法。一旦你的项目代码越来越多,添加的日志数目

2014-12-24 10:05:28 687

原创 忽略大小写的字符串比较

忽略大小写字符串的比较这看起来是一个简单的问题。说容易也容易,说困难也困难,具体取决于你所要求的通用性怎么样,如果你不打算考虑国际化的问题,如果是类似于strcmp之类的功能那实现起来还算简单,如果需要考虑的话下面有几种简单的方法。下面的几种方法是我在effective STL中找到的,现在我把它们做一个总结。方法一:使用STL的mismatch算法int CompareChar(ch

2014-12-19 10:33:13 1348

原创 循环容器和RAII

一.什么是RAII手法?RAII(Resource Acquisition Is Initialization),也称为“资源获取就是初始化,是C++语言的一种管理资源、避免泄漏的惯用法。C++标准保证任何情况下,已构造的对象最终会销毁,即它的析构函数最终会被调用。简单的说,RAII的做法是使用一个对象,在其构造时获取资源,在对象生命期控制对资源的访问使之始终保持有效,最后在对象析构的时候

2014-12-08 15:21:47 501

原创 用function和bind这对神器实现策略模式

首先我们先来认识一下什么是策略模式,百度百科的定义是:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。看起来比较容易头晕吧,其实简单的以我自己的理解来讲就是将一个类中可能会引起变化的行为独立出来,让它变成一个接口的形式,当你需要用到这个接口的具体实现时,你再将这个接口实现。 如果你还不明白,那么我举个例子吧。如果你要设计

2014-12-04 14:12:33 1001

原创 多线程单例模式

单例模式相信一般的开发人员都很熟悉了。但是在多线程环境下的单例模式你确定你清楚吗?        首先在研究多线程单例模式之前我们必须先清楚几个基本都的知识点。1.pthread_key_t;这里提一下什么是线程存储:在多线程程序中,所有线程共享程序中的变量。现在有一全局变量,所有线程都可以使用它,改变它的值。而如果每个线程希望能单独拥有它,那么就需要使用线程存储了。表面上看起来这是一个全局变

2014-12-02 09:23:02 555

原创 Linux线程池的实现

在学习了muduo的网络库之后,觉得muduo网络库关于线程池的实现很有意思,它利用boost库的function和bind这一对神奇,摆脱了使用继承和虚函数的束缚,而且拜托了线程回调函数的特异性,不能拘泥于回调函数的实现形式,我觉得这其中有很多手法值得我来借鉴。

2014-11-24 15:37:35 539

原创 Log4Cplus在Linux下的安装及使用

在做服务器程序的过程中我想最有用的调试手段应该是日志系统了,好的日志能够直观快速的定位程序的问题,如系统崩溃,死锁,错误的异常抛出等。如何选择一个好的日志库对程序员来说至关重要。设计简陋粗糙的日志系统,可能会到导致系统的性能随着日志的增加而线性的降低,还可能导致线程安全型等问题,我在项目中用到了log4cplus这个日志库,log4cplus是C++编写的开源的日志系统,功能非常全面,用到自己开发

2014-11-14 10:06:05 4615

原创 获取MP3文件的播放时间

之前做项目需要做一个类似于mp3的背景音乐功能,由于项目环境是ARM+Linux的所以我马上就想到了madplay这个开源的播放器,但是这个播放器没办法返回播放音乐文件的播放时间。这样做进度条功能就没招了,考虑了很久最终决定通过解析mp3文件来获取它的播放时间。要想获取mp3文件的时间首先得分析mp3文件的帧格式,至于mp3文件的帧格式分析网上有相应的资料,我就不花大力气讲解了,给大家几个网址

2014-06-30 18:42:39 4181

原创 iconv库移植到ARM

有许多人在做项目的时候都会遇到字符编码的不一致导致的乱码问题,那如何去解决呢?在Linux系统上可以通过iconv函数族来进行编码转换,可是关键的问题是,用iconv编写的转换程序在x86的主机上运行的好好的可是一旦移植到ARM板上就不行了。为了解决这个问题,我决定亲自编译一个iconv的ARM版本,然后用自己编译出来的iconv库而不用主机系统的函数库。首先下载iconv库的压缩包可以下下面的网

2014-06-26 17:59:29 4450

原创 c++设计模式之简单工厂模式

设计模式是一个

2014-06-24 10:18:52 497

原创 嵌入式Linux更改启动logo

想要改掉嵌入式Linux的那个启动图标的企鹅图片该怎么做呢?这是一个小技巧,其实很简单,首先我们找到这个企鹅图片的源文件,它在哪里呢?打开你的linux内核源码,在drivers/video/logo/中有很多以“.ppm”为后缀的文件,这些就是图标文件。一般开机图标采用的是logo_linux_clut224.ppm这个,要改掉开机logo只需要把你想要的图片替换成logo_linux_clut

2014-06-19 11:17:31 670

原创 Linux守护进程

在公司做项目的时候为了防止服务器中的bug导致程序崩溃,通常情况下需要一个进程负责监控你的服务器程序即使发生崩溃的情况也能在第一时间将服务器重启不至于会发生服务器程序崩溃而再也无法启动的情况。为此,我写了一个监测程序,采用守护进程的方式来实现。守护进程是一种在后台运行的特殊进程,它脱离了终端从而避免进程被任何终端所产生的信号所打断。守护进程有以下几个要点:      1. 屏蔽一些有关

2014-06-17 15:24:49 609

原创 C++上Json库的使用

在我使用Json库的时候先将json的头文件和实现代码加入到工程中去,头文件和实现代码可以这个地址下载:    我写了一段简单的json的使用代码可供参考:Json的使用:1.       定义一个Json对象:Json::Value  jVal;2.       赋值int型:jVal[“json_int”] = 1;  intiValue = jVal[“json_in

2014-06-14 11:19:32 2570

原创 JPEG库的使用方法

本篇文章讲的是jpeg库的使用,至于jpeg库的编译方法,在之前的文章中已经介绍过了。首先我们看看用jpeg库进行编程我们需要哪些资源:在jpeg库编译完成后我们需要其中的jconfig.h,jmorecfg.h,jpeglib.h这三个头文件,还需要libjpeg.a这个库文件(在这里我们使用静态链接库)。我用Qt+jpeg库写了一个在Linux操作系统下使用的jpeg图片格式转换的小工具,

2014-06-13 10:16:22 5768

原创 JPEG库在Linux系统下的编译和移植

这篇文章介绍了jpeg库在Linux系统下的编译和移植,经过了亲自的验证,编译首先需要准备以下资源:jpegsrc.v6b.tar.gz(jpeg库),libtool-1.5.26.tar.gz(编译需要的工具),交叉编译工具链(移植到ARM时使用)。jpegsrc.v6b.tar.gz下载位置:http://115.com/?ct=rar&pickcode=attc36k1f57cah4dq

2014-06-11 15:06:18 3523

原创 Qt程序移植到ARM(2)

在上一篇博客里讲到了如何编译安装嵌入式Qt的版本,这里我要讲如何将Qt的程序移植到ARM开发板上(c/c++的程序也可以)。在这里我们介绍两种方法,第一种方法是不使用QtCreator直接在Linux终端下操作,第二种是使用QtCreator来进行编译,第一种方法的优点是不用安装QtCreator直接就可以操作,,缺点是由于是在命令行的界面下操作,程序错误的调试很不方便。第二种方法的优点是你可

2014-06-10 14:48:50 952

原创 Qt程序移植到ARM

Qt程序移植到ARM公司之前做了个项目是基于arm+linux的体系,想要在板子上运行c++的服务器程序,思前想后觉得Qt既对c++有非常好的兼容。又有非常之好的跨平台性将来移植到别的系统非常的方便,而且Qt提供的编辑工具QtCreator操作又很方便所以决定选用Qt作为开发平台。想要在ARM上运行Qt的程序必须要先编译一个Qt的ARM版本才行,这里我采用Qt版本是:qt-everywhe

2014-06-09 18:00:40 2026 3

基于Rector模式的定时器代码

一个简单的rector模式的模型实现的一个定时器的代码

2015-01-15

Linux线程池

在Linux下运用Boost来实现的一个线程池,方便而且高效

2014-11-24

获取mp3文件的播放时间

获取mp3文件的播放时间(通过调用getMPEGTime返回播放的秒数)

2014-06-30

iconv字符编码转换库的压缩包

iconv库的压缩包,进行字符编码的转换,Linux系统下使用

2014-06-26

Linux下的jpeg图片格式转换器

该工具是用Qt写的一个jpeg图片格式转换器,使用了jpeg的静态链接库,主要功能是实现jpeg图片的尺寸改变,色阶的改变和质量参数的改变

2014-06-13

国嵌mini2440项目开发手册

成都国嵌关于mini2440开发板的实验操作手册

2013-04-16

基于arm-linux平台的mini2440开发板的MP3项目

基于arm-linux平台的mini2440开发板的MP3项目,使用到madplay,包含所用需要的资源

2013-04-16

linux系统下的USB鼠标驱动代码

这是一个Linux系统下的USB鼠标驱动,具有通用性强,简单易懂的特点

2013-04-16

linux网络编程教程

linux网络编程教程,适合于网络编程的初学者,有一些实例介绍,方便于更好地学习网络编程

2012-11-29

空空如也

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

TA关注的人

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