- 博客(16)
- 资源 (8)
- 收藏
- 关注
原创 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
206
原创 信号量
信号量对线程的同步方式与前面几种方法不同,信号量允许多个线程同时使用共享资源,这与操作系统中的PV操作相同。它指出了同时访问共享资源的线程最大数目。它允许多个线程在同一时刻访问同一资源,但是需要限制在同一时刻访问此资源的最大线程数目。在用CreateSemaphore创建信号量时即要同时指出允许的最大资源计数和当前可用资源计数。一般是将当前可用资源计数设置为最大资源计数。每增加一个线程对共享资源的
2017-04-20 11:55:53
408
原创 事件对象
事件对象也可以通过通知操作的方式来保持线程的同步,并且可以实现不同进程中的线程同步操作。事件对象包含的几个操作原语:CreateEvent() 创建一个事件对象OpenEvent() 打开一个事件对象SetEvent() 设置指定的事件对象为有信号状态WaitForSingleObject() 等待一个事件 WaitForMultipleObjects() 等待多个事件
2017-04-19 15:16:05
723
原创 互斥量
互斥量跟临界区很相似,只有拥有互斥对象的线程才具有访问资源的权限,由于互斥对象只有一个,因此就决定了任何情况下此共享资源都不会同时被多个线程所访问。当前占据资源的线程在任务处理完后应将拥有的互斥对象交出,以便其他线程在获得后得以访问资源。互斥量比临界区复杂。因为使用互斥不仅仅能够在同一应用程序不同线程中实现资源的安全共享,而且可以在不同应用程序的线程之间实现对资源的安全共享。 互斥量包含的
2017-04-19 15:00:26
378
原创 生产者消费者模式
#include <queue>#include <string>#include <mutex>#include <thread>#include <iostream>class CBuffer{public: CBuffer() {} ~CBuffer() {} static CBuffer* GetBuffe...
2017-04-19 12:38:19
238
转载 临界区
保证在某一时刻只有一个线程能访问数据的简便办法。在任意时刻只允许一个线程对共享资源进行访问。如果有多个线程试图同时访问临界区,那么在有一个线程进入后其他所有试图访问此临界区的线程将被挂起,并一直持续到进入临界区的线程离开。临界区在被释放后,其他线程可以继续抢占,并以此达到用原子方式操作共享资源的目的。 临界区包含两个操作原语: EnterCriticalSection() 进入临界区
2017-04-18 12:54:47
2647
转载 WaitForMultipleObjects用法详解
WaitForMultipleObjects是Windows中的一个功能非常强大的函数,几乎可以等待Windows中的所有的内核对象函数原型为:DWORD WaitForMultipleObjects( DWORD nCount, // number of handles in the handle array CONST HANDLE *lpHan
2017-04-18 12:26:39
573
转载 虚拟机扩充硬盘
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
1355
转载 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
225
原创 动态链接库加载函数的两种方法及区别
动态链接库的编写: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
4405
原创 使用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
459
原创 单例模式
单例模式的作用:1). 确保一个类只有一个实例被建立2). 提供了一个对对象的全局访问指针3). 在不影响单例类的客户端的情况下允许将来有多个实例1.懒汉式懒汉式的特点是延迟加载:class Singleton{public: ~Singleton() = default; static Singleton* GetInstance() { if (nullpt...
2017-04-14 20:31:58
317
原创 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
336
转载 C++空类的研究
1.C++空类及没有成员变量的类的大小实例分析众所周知的C++中空类的大小为1,但是除了空类之外的其他一些没有成员变量的类的大小,还是有相当一部分开发人员对此有很多不明之处的。这里我们以如下代码为例:#include using namespace std;class a {};class b {public: void test() { cout << "test" <<
2017-04-13 13:21:26
304
原创 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
296
原创 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
2149
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人