自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(37)
  • 资源 (8)
  • 收藏
  • 关注

转载 修改SVN已提交项目的消息日志

直接在TortoiseSVN中修改过往日志,会提示:DAV request failed;it's possible that the repository's pre-revprop-change hook either failed or is non-existentAt least one property change failed; repository is unchange

2017-04-25 14:05:17 340

转载 C++虚函数表

前言C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。关于虚函数的使用方法,我在这里不

2017-04-25 13:40:58 345

转载 C++中extern “C”含义深层探索

1.引言  C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同。作为一种欲与C兼容的语言,C++保留了一部分过程式语言的特点(被世人称为“不彻底地面向对象”),因而它可以定义不属于任何类的全局变量和函数。但是,C++毕竟是一种面向对象的程序设计语言,为了支持函数的重载,C++对全局函数的处理方式与C有明显的不

2017-04-24 12:45:04 341

转载 虚析构函数(√)、纯虚析构函数(√)、虚构造函数(X)

一. 虚析构函数我们知道,为了能够正确的调用对象的析构函数,一般要求具有层次结构的顶级类定义其析构函数为虚函数。因为在delete一个抽象类指针的时候,必须要通过虚函数找到真正的析构函数。例如:#include using namespace std;class Base{public:Base() {}virtual ~Base() {cout<<"Base Destruct

2017-04-24 12:01:18 280

原创 C++类型转换

C风格的强制类型转换(Type Cast)很简单,不管什么类型的转换统统是:TYPE b = (TYPE)a。C++风格的类型转换提供了4种类型转换操作符来应对不同场合的应用。1.const_cast去掉const属性:#include using namespace std;class CMyClass{public: CMyClass() { m_nNu

2017-04-21 13:01:15 161

原创 信号量

信号量对线程的同步方式与前面几种方法不同,信号量允许多个线程同时使用共享资源,这与操作系统中的PV操作相同。它指出了同时访问共享资源的线程最大数目。它允许多个线程在同一时刻访问同一资源,但是需要限制在同一时刻访问此资源的最大线程数目。在用CreateSemaphore创建信号量时即要同时指出允许的最大资源计数和当前可用资源计数。一般是将当前可用资源计数设置为最大资源计数。每增加一个线程对共享资源的

2017-04-20 11:55:53 369

原创 事件对象

事件对象也可以通过通知操作的方式来保持线程的同步,并且可以实现不同进程中的线程同步操作。事件对象包含的几个操作原语:CreateEvent() 创建一个事件对象OpenEvent() 打开一个事件对象SetEvent() 设置指定的事件对象为有信号状态WaitForSingleObject() 等待一个事件 WaitForMultipleObjects() 等待多个事件 

2017-04-19 15:16:05 685

原创 互斥量

互斥量跟临界区很相似,只有拥有互斥对象的线程才具有访问资源的权限,由于互斥对象只有一个,因此就决定了任何情况下此共享资源都不会同时被多个线程所访问。当前占据资源的线程在任务处理完后应将拥有的互斥对象交出,以便其他线程在获得后得以访问资源。互斥量比临界区复杂。因为使用互斥不仅仅能够在同一应用程序不同线程中实现资源的安全共享,而且可以在不同应用程序的线程之间实现对资源的安全共享。 互斥量包含的

2017-04-19 15:00:26 335

原创 生产者消费者模式

#include &lt;queue&gt;#include &lt;string&gt;#include &lt;mutex&gt;#include &lt;thread&gt;#include &lt;iostream&gt;class CBuffer{public: CBuffer() {} ~CBuffer() {} static CBuffer* GetBuffe...

2017-04-19 12:38:19 206

转载 临界区

保证在某一时刻只有一个线程能访问数据的简便办法。在任意时刻只允许一个线程对共享资源进行访问。如果有多个线程试图同时访问临界区,那么在有一个线程进入后其他所有试图访问此临界区的线程将被挂起,并一直持续到进入临界区的线程离开。临界区在被释放后,其他线程可以继续抢占,并以此达到用原子方式操作共享资源的目的。 临界区包含两个操作原语: EnterCriticalSection() 进入临界区

2017-04-18 12:54:47 2587

转载 WaitForMultipleObjects用法详解

WaitForMultipleObjects是Windows中的一个功能非常强大的函数,几乎可以等待Windows中的所有的内核对象函数原型为:DWORD WaitForMultipleObjects(    DWORD nCount,             // number of handles in the handle array  CONST HANDLE *lpHan

2017-04-18 12:26:39 524

转载 虚拟机扩充硬盘

1. 按 打开运行对话框,输入“CMD”,回车,打开命令提示符窗口;2. 进入 VMware 的安装目录(X:\Program Files\VMware\VMware Workstation);3. 输入一些命令 vmware-vdiskmanager.exe -x 30GB "f:\VM\window 2000\Windows 2000.vmdk";注意:a. 异常情况:Failed

2017-04-18 12:10:06 1021

转载 C++中虚析构函数的作用

我们知道,用C++开发的时候,用来做基类的类,其析构函数一般都是虚函数。可是,为什么要这样做呢?下面用一个小例子来说明:有下面的两个类:class Base{public:Base() {};virtual ~Base(){ cout << "Output from the destructor of class Base!" << endl; };virtual v

2017-04-18 12:06:22 192

转载 析构函数私有化

析构函数为private的类,只能用new生成对象,(用new生成的对象,在面向对象中是很有用的.它保存在堆上,可以自由控制生命周期。)但如何保证一个对象只能在堆上生成呢?答案其实也很简单,只需把析构函数定义为私有成员。例如OnlyCanBeNew类定义。class OnlyCanBeNew {public:     OnlyCanBeNew(){}private:

2017-04-18 12:03:28 1422

原创 动态链接库加载函数的两种方法及区别

动态链接库的编写:1.创建一WIN32动态链接库工程Dll1,添加一C++源文件Dll1.cpp,在源文件中编写一个测试函数int _stdcall add(int a, int b){    return (a+b);}2.定义一模块定义文件Dll1.def,在里面添加如下内容:LIBRARY Dll1EXPORTSadd该文件的作用是导出函数

2017-04-18 11:54:24 4334

转载 gdb调试命令

01).gcc -Wall -g test.c -o test    (生成可执行文件, -Wall打开警告提示)02).gdb test                   (进入调试状态)03).run(r)                    (启动调试)04).list(l)                    (查看最近十行的源代码)05).l

2017-04-18 11:45:17 189

转载 ubuntu自带VI编辑器不好用的解决办法

由于Ubuntu预安装的是tiny版本,就会导致我们在使用上的产生不便。所以我们要安装vim的full版本。首先,先卸掉旧版的vi,输入以下命令: sudo apt-get remove vim-common然后安装full版的vim,输入命令:sudo apt-get install vim这样安装好了之后的VI就没有那么难用了。

2017-04-18 11:44:19 452

转载 Ubuntu14.04下安装mongodb 3.X

1.安装keyapt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10 2.添加源echo "deb http://repo.mongodb.org/apt/debian wheezy/mongodb-org/3.0 main" | sudo tee /etc/apt/sour

2017-04-18 11:42:34 740

原创 使用GCC开发动态库供java调用

1.开发环境Ubuntu14.04 64位+gcc4.8.4+JDK2.安装JDK1).查看JDK的版本$java -version2).安装JDK如何没有安装JDK,可以通过命令$javah 查看可安装的JDK包,选择一个安装(我系统上安装的是openjdk-7-jdk)命令如下:$sudo apt-get inst

2017-04-18 11:39:36 409

转载 事件选择模型

WSAEventSelect 是 WinSock 提供的一种异步事件通知I/O模型,与 WSAAsyncSelect模型有些类似。该模型同样是接收 FD_XXX 之类的网络事件,但是是通过事件对象句柄通知,而非像 WSAAsyncSelect一样依靠Windows的消息驱动机制。与WSAAsyncSelect模型相同,WSAEventSelect将所有的SOCKET事件分为如下类型:(共十

2017-04-18 10:33:26 784

转载 异步选择模型

WSAAsyncSelect模型是Windows socket的一个异步IO模型,利用这个模型,应用程序可在一个套接字上,接收以Windows消息为基础的网络事件通知。Windows sockets应用程序在创建套接字后,调用WSAAsyncSelect函数注册感兴趣的网络事件,当该事件发生时Windows窗口收到消息,应用程序就可以对接收到的网络事件进行处理。利用WSAAsyncSelect函数

2017-04-18 10:26:13 1705

转载 选择模型

select(选择)模型是Winsock中最常见的I/O模型。之所以称其为“ select模型”,是由于它的核心便是利用select函数,实现对 I/O的管理!利用select函数,我们判断套接字上是否存在数据,或者能否向一个套接字写入数据。之所以要设计这个函数,唯一的目的便是防止应用程序在套接字处于锁定模式中时,在一次I/O绑定调用(如send或recv)过程中,被迫进入“锁定”状态;同时防止在

2017-04-18 10:17:49 697

翻译 进程间通信

1.WM_COPYDATAWM_COPYDATA是一种非常强大却鲜为人知的消息。当一个应用向另一个应用传送数据时,发送方只需调用SendMessage函数(不能调用PostMessage,请参看MSDN),参数是目的窗口的句柄,WM_COPYDATA消息,源窗口的句柄,传递数据的起始地址。接收方只需像处理其它消息那样处理WM_COPYDATA消息,这样收发双方就实现了数据共享。WM_COP

2017-04-17 21:06:28 428

转载 等待定时器内核对象

相关函数:CreateWaitableTimer(LPSECURITY_ATTRIBUTES lpTimerAttributes, BOOL bManualReset, LPCTSTR lpTimerName);参数:lpTimerAttributes:一个结构体,用于设置对象的安全特性bManualReset:如果为TRUE,表示创建一个人工重置计时器;如果为FALSE,则创建一

2017-04-15 20:54:04 308

原创 向线程发送消息

函数原型:BOOL PostThreadMessage(DWORD dwThreadId,UINT uMsg,WPARAM wParam,LPARAM lParam);函数功能:该函数将一个消息放入到指定线程的消息队列里,不等待线程处理消息就返回。如果dwThreadId不是一个有效的线程标识符或由dwThreadId指定的线程没有消息队列,该函数将调用失败,GetLastError返回ERR

2017-04-14 21:12:41 1916 1

原创 单例模式

单例模式的作用:1). 确保一个类只有一个实例被建立2). 提供了一个对对象的全局访问指针3). 在不影响单例类的客户端的情况下允许将来有多个实例1.懒汉式懒汉式的特点是延迟加载:class Singleton{public: ~Singleton() = default; static Singleton* GetInstance() { if (nullpt...

2017-04-14 20:31:58 278

原创 智能指针

#include #include using namespace std;class CMyClass{public: CMyClass(int n) : i(n) { cout<<"CMyClass contructor"<<i<<endl; } CMyClass(const CMyClass& other) { cout<<"CMyClass copy cont

2017-04-14 13:09:32 225

原创 使用COM接口对象获得当前桌面墙纸的文件名

1.开发环境WINDOWS+VS2010+MFC Dialog Based2.为了添加接口对象类,需要在stdafx.h中的#include 行之前增加#include  3.在BOOL CXXXApp的InitInstance() 函数中初始化COM库,即调用函数CoInitialize(NULL),MFC会自动完成COM库的回收,因此不需要调用 CoUninitialize()

2017-04-13 22:14:26 371

转载 ASSERT和VERIFY的区别

1. ASSERT与VERIFY宏在Debug模式下作用基本一致,二者都对表达式的值进行计算,如果值为非0,则什么事也不做;如果值为0,则输出诊断信息。2.ASSERT与VERIFY宏在Release模式下效果完全不一样。ASSERT不计算表达式的值,也不会输出诊断信息;VERIFY计算表达式的值,但不管值为0还是非0都不会输出诊断信息。VERIFY与ASSERT用在程序调试上并无本质上的

2017-04-13 21:55:39 2075

转载 Direct Show的环境配置

1.安装DriectX9.0_c SDK,默认安装到C盘根目录下;2.编译基类源代码,生成静态库文件,使用VC6打开C:\DXSDK\Samples\C++\DirectShow\BaseClasses目录下的baseclasses.dsw工程,Debug/Debug Unicode版本生成strmbasd.lib,Release/Release Unicode版本生成strmbase

2017-04-13 21:43:21 749

原创 可变参数的格式化输出函数

#include #include #include #include using namespace std;//可用在多个平台下,不能处理宽字符int FormatOutput1(string& buf, const char* format, ...){ char szBuffer[1024]; memset(szBuffer, 0x0, sizeof(szBuffe

2017-04-13 16:04:49 1093

转载 Windows终止线程的四种方法

终止线程运行  若要终止线程的运行,可以使用下面的方法:  • 线程函数返回(最好使用这种方法)。  • 通过调用 ExitThread 函数,线程将自行撤消(最好不要使用这种方法)。  • 同一个进程或另一个进程中的线程调用 TerminateThread 函数(应该避免使用这种方法)。  • 包含线程的进程终止运行(应该避免使用这种方法)。  下面将介绍

2017-04-13 15:14:49 7815

原创 STL map的用法

map是STL的一个关联容器,它提供一对一的数据处理能力(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)一.插入#include #include using namespace std;int main() { pair::iterator, bool> insert_pair; map cls; //1.使用pair

2017-04-13 14:57:23 306

转载 C++空类的研究

1.C++空类及没有成员变量的类的大小实例分析众所周知的C++中空类的大小为1,但是除了空类之外的其他一些没有成员变量的类的大小,还是有相当一部分开发人员对此有很多不明之处的。这里我们以如下代码为例:#include using namespace std;class a {};class b {public: void test() { cout << "test" <<

2017-04-13 13:21:26 267

转载 C++11新特性

1.auto关键字C++11中引入auto第一种作用是为了自动类型推导。auto的自动类型推导,用于从初始化表达式中推断出变量的数据类型。通过auto的自动类型推导,可以大大简化我们的编程工作。auto实际上是在编译时对变量进行了类型推导,所以不会对程序的运行效率造成不良影响。另外,似乎auto并不会影响编译速度,因为编译时本来也要右侧推导然后判断与左侧是否匹配。 auto a; //

2017-04-13 12:12:57 482

原创 stringstream的用法

#include #include #include #include using namespace std;int main(){ ifstream infile1; infile1.open("d:\\test.txt"); string sLine, sWord; while (getline(infile1, sLine)) { istringstream i

2017-04-13 11:47:50 257

原创 C++标准库getline函数的使用

原型:getline(istream&, string&)从输入流istream读取一行数据到stirng中。#include #include #include using namespace std;int main(){ //使用通用的getline ifstream infile1; infile1.open("d:\\test.txt"); string sL

2017-04-13 10:39:30 2078

西门子开发的OPC UA客户端和源码.zip

西门子开发的OPC UA客户端和源码 C#

2019-12-04

kaldi的全部资料_v0.4.zip

kaldi全部资料v0.4

2019-06-05

DuiLib入门教程

DuiLib开发入门教程。

2019-04-07

Boost程序库完全开发指南 第3版 中文版

Boost程序库完全开发指南 第3版 中文版

2018-01-25

区块链技术指南

比较高的区块链技术书籍,讲解了比特币,超级账本以及以太坊等技术,喜欢的可以下载来看!

2017-09-30

Visual Assist X2093破解版

适用于VS2015及以前的版本的vs开发工具,编程时会有代码提示,提高代码的编写速度。

2017-09-30

Vsiaul Assist X2074破解版

适用于VS2010及以前的版本的vs开发工具,编程时会有代码提示,提高代码的编写速度。

2017-05-19

2009年自考软件工程培训试验及答案

2009年自考软件工程培训试验及答案详细讲解。

2009-11-15

空空如也

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

TA关注的人

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