上一页 1 ··· 17 18 19 20 21 22 23 24 25 ··· 28 下一页
  2014年4月7日
摘要: 我们知道,用C++开发的时候,用来做基类的类的析构函数一般都是虚函数。可是,为什么要这样做呢?下面用一个小例子来说明:有下面的两个类:class ClxBase{public:ClxBase() {};virtual ~ClxBase() {};virtual void DoSomething() { cout DoSomething();delete pTest;的输出结果是:Do something in class ClxDerived!Output from the destructor of class ClxDerived!这个很简单,非常好理解。但是,如果把类ClxBase析构函 阅读全文
posted @ 2014-04-07 09:40 bitbit 阅读(604) 评论(0) 推荐(0) 编辑
摘要: 文章导读:C++允许为一个派生类指定多个基类,这样的继承结构被称做多重继承。 在过去的学习中,我们始终接触的单个类的继承,但是在现实生活中,一些新事物往往会拥有两个或者两个以上事物的属性,为了解决这个问题,C++引入了多重继承的概念,C++允许为一个派生类指定多个基类,这样的继承结构被称做多重继承。 举个例子,交通工具类可以派生出汽车和船连个子类,但拥有汽车和船共同特性水陆两用汽车就必须继承来自汽车类与船类的共同属性。 由此我们不难想出如下的图例与代码: 当一个派生类要使用多重继承的时候,必须在派生类名和冒号之后列出所有基类的类名,并用逗好分隔。//程序作者:管宁 //站点:www.... 阅读全文
posted @ 2014-04-07 09:39 bitbit 阅读(555) 评论(0) 推荐(0) 编辑
摘要: 第一篇:作为程序员,我们平时最担心见到的事情是什么?是内存泄漏?是界面不好看?……错啦!我相信我的看法是不会有人反对的——那就是,程序发生了崩溃!“该程序执行了非法操作,即将关闭。请与你的软件供应商联系。”,呵呵,这句 M$ 的“名言”,恐怕就是程序员最担心见到的东西了。有的时候,自己的程序在自己的机器上运行得好好的,但是到了别人的机器上就崩溃了;有时自己在编写和测试的过程中就莫名其妙地遇到了非法操作,但是却无法确定到底是源代码中的哪行引起的……是不是很痛苦呢?不要紧,本文可以帮助你走出这种困境,甚至你从此之后可以自豪地要求用户把崩溃地址告诉你,然后你就可以精确地定位到源代码中出错的那行了。( 阅读全文
posted @ 2014-04-07 09:30 bitbit 阅读(3533) 评论(0) 推荐(0) 编辑
  2014年4月6日
摘要: 1.Windows 的历史中国人喜欢以史为鉴,而事实也确实是,如果你能知道一件事情的来龙去脉,往往可以更容易地理解事物为什么会表现为当前这样的现状。所以,我的介绍性开场白通常会以一段历史开始。不过,我不会以精确到年月日的那种方式详细讲述,而是选取几个对我们的编程生涯有重要影响的关键点。Windows 是真正的图形化界面操作系统的普及者,无论任何人,争夺什么第一个实现的GUI、第一个商业化的GUI之类的虚名,都替代不了 Windows 的历史功绩,让最普通的用户能够容易地操纵PC。第一个声名大噪的版本是Windows 3.0(也有人认为应该是它的更加健康强壮的弟弟Windows 3.1),从那个 阅读全文
posted @ 2014-04-06 19:56 bitbit 阅读(19173) 评论(3) 推荐(10) 编辑
摘要: 1.使用全局变量(窗体不适用) 实现线程间通信的方法有很多,常用的主要是通过全局变量、自定义消息和事件对象等来实现的。其中又以对全局变量的使用最为简洁。该方法将全局变量作为线程监视的对象,并通过在主线程对此变量值的改变而实现对子线程的控制。 由于这里的全局变量需要在使用它的线程之外对其值进行改变,这就需要通过volatile关键字对此变量进行说明。使用全局变量进行线程通信的方法非常简单,通过下面给出的示例代码能够对其有一个基本的认识。 // 线程通信用全局变量 volatile bool g_bDo = false; …… //线程处理函数 UINT ThreadProc5(LPVOID pP 阅读全文
posted @ 2014-04-06 19:30 bitbit 阅读(2175) 评论(0) 推荐(0) 编辑
摘要: volatile 修饰符的作用是告诉编译器无需对该变量作任何的优化,即无需将它放到一个寄存器中,并且该值可被外部改变。对于多线程引用的全局变量来说,volatile 是一个非常重要的修饰符.一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子: 1).并行设备的硬件寄存器(如:状态寄存器) 2).一个中断服务子程序中会访问到的非自动变量(Non-automaticvariables) 3).多线程应用 阅读全文
posted @ 2014-04-06 19:28 bitbit 阅读(941) 评论(0) 推荐(0) 编辑
摘要: http://www.cppblog.com/beautykingdom/archive/2008/07/09/55760.aspx?opt=admin在STL(标准模板库)中经常会碰到要删除容器中部分元素的情况,本人在编程中就经常编写这方面的代码,在编码和测试过程中发现在STL中删除容器有很多陷阱... 阅读全文
posted @ 2014-04-06 17:15 bitbit 阅读(4305) 评论(0) 推荐(0) 编辑
摘要: 这是整理孙鑫VC得到的关于线程同步方面的笔记.n 事件对象也属于内核对象,包含一个使用计数,一个用于指明该事件是一个自动重置的事件还是一个人工重置的事件的布尔值,另一个用于指明该事件处于已通知状态还是未通知状态的布尔值。n 有两种不同类型的事件对象。一种是人工重置的事件,另一种是自动重置的事件。当人工重置的事件得到通知时,等待该事件的所有线程均变为可调度线程。当一个自动重置的事件得到通知时,等待该事件的线程中只有一个线程变为可调度线程。得到事件对象后,因为是自动重置的事件对象,所以操作系统将该事件对象设置为非信号状态//------------------------------------- 阅读全文
posted @ 2014-04-06 10:26 bitbit 阅读(427) 评论(0) 推荐(0) 编辑
摘要: VC MFC中线程同步对象的区别临界区 CCriticalSection,在用户模式工作,适用于保护线程间共享资源,一个线程可以多次Lock不会出错。不支持在多进程之间工作。互斥量 CMutex,在内核模式工作,除了支持临界区的功能,还可以为互斥量命名,以便在多进程中工作。互斥量比临界区耗资源。 事件 CEvent,在内核模式工作,适用于一个线程等待另一个线程完成某任务。信号量 CSemaphore,在内核模式工作,适用于允许特定个数的线程执行某任务。 实例:CwinThread *pThread;1、使用互斥对象 HANDLE hMutex; hMutex = . 阅读全文
posted @ 2014-04-06 10:19 bitbit 阅读(934) 评论(0) 推荐(0) 编辑
摘要: 退出线程可以有四种方法:1.线程函数的return返回(最好这样): 其中用线程函数的return返回, 而终止线程是最安全的, 在线程函数return返回后, 会清理函数内申请的类对象, 即调用这些对象的析构函数. 然后会自动调用 _endthreadex()函数来清理 _beginthreadex(...)函数申请的资源(主要是创建的tiddata对象).2.调用 _endthreadex()函数 或 ExitThread()函数(最好不要): 如果使用这两种方法退出线程, 则不会执行线程函数的return语句, 所以就不会调用线程函数作用域内申请的类对象的析构函数, 会造成内存泄露... 阅读全文
posted @ 2014-04-06 10:14 bitbit 阅读(17482) 评论(0) 推荐(0) 编辑
上一页 1 ··· 17 18 19 20 21 22 23 24 25 ··· 28 下一页