摘要:项目简介和code见《同步异步和阻塞2-测试小项目》 1. 实现 1> 异步线程IO处理 unsigned CAsyncIO::ThreadWork() { int nRet = IO(); //map is better than array at here, but it need STL unsigned uTid = GetCurrentThreadId(); ...
阅读全文
随笔分类 - C++
摘要:项目简介和code见《同步异步和阻塞2-测试小项目》 1. 实现 由于IO是阻塞的,所以要实现轮询IO的结果,需要将IO放入线程中处理,IO的处理结果作为给线程的exit code返回。这里用“CBaseThread”简单的将线程处理函数封装到类中 在OnStart()中,先依次启动2个线程处理IO
阅读全文
摘要:项目简介和code见《同步异步和阻塞2-测试小项目》 1. 实现 同步的实现很简单,依次call2次 IO() 函数,此时OnStart()由于是在主线程中调用的,IO()函数会阻塞主线程,当IO()完成后然后将结果通知给UI后立即返回。 当然,由于IO是阻塞的,所以所谓的IO处理进度是无法实现的,
阅读全文
摘要:在《同步异步和阻塞1》中,分别说明了3种同步异步和阻塞非阻塞的优缺点,从这个blog开始,我们用一个小项目来进一步深入的看看他们的优缺点。 1. 项目简介 code : sync_io 编译 : C++, VS2010 项目有2个IO,按下”Start”按钮后就会开始按照不同的IO处理方法调用IO,
阅读全文
摘要:1. 问题 学过编程的朋友应该对冒泡排序不陌生,这里就不多讲了,直接提一个有意思的问题: 冒泡排序中,如果经过某一趟冒泡排序后,该序列已经排序好了,那么此时就可以提前退出了。 2. 分析 2.1 如何判断序列已经是有序的呢? 看一个有序数列{1, 2, 3, 4, 5},如果用冒泡法来排序,我们发现
阅读全文
摘要:为了探究虚表的今生前世,先来一段测试代码虚函数类: 1 class CTest 2 { 3 public: 4 int m_nData; 5 6 virtual void PrintData() 7 { 8 printf("D...
阅读全文
摘要:1、选择类F8当前位置变成选定区域的头/尾(再移动光标或者点鼠标就会选定)Ctrl + F8当前行变成选定区域的头/尾(再移动上下光标或者点鼠标就会选定多行)CTRL + W选择当前单词Ctrl + Shift + ←选定当前位置到前一个单词Ctrl + Shift + →选定当前位置到后一个单词S...
阅读全文
摘要:继承类研究1、Code1.1 Cbase, CTEST为基类,CTest2为其继承类,并重新申明了基类中的同名变量class CBase{public: int Data; CBase(); ~CBase();};class CTEST{ ...
阅读全文
摘要:一、原码分析1.1 测试代码 为了方便查看拷贝构造函数调用过程,自定义了拷贝构造函数,但啥也没干。class CTEST{public: int m_nData; //Method:public: CTEST() ...
阅读全文
摘要:源自一道面试题,觉得很有意思class CBase{public: virtual void PrintData(int nData = 111);};void CBase::PrintData(int nData /* = 111 */){ ...
阅读全文
摘要:先看测试代码,CTEST继承自CBase,并包含一个CMember成员对象:static int nIndex = 1;class CMember{public: CMember() { printf("%d CM...
阅读全文
摘要:智能指针是为了解决程序员创建了资源而忘记释放造成内存泄漏的问题,可减少代码编写过程中的代码长度,减少程序员对资源管理的难度,因而在COM组件及各类插件中有广泛应用。1、智能指针的原理智能指针的原理是利用对象在离开作用域时会调用对象的析构函数,将资源指针封装进类中,并将资源指针的释放过程写入析构函数...
阅读全文