精华内容
下载资源
问答
  • 什么叫动态创建???  创建位置类型的对象,我们可以先写一个创建对象的函数,要求任何类的对象都可以使用该函数去创建,也包括后来定义的类。(你给我哪个类这个函数就能创建这个类的对象,函数在类的定义...
    什么叫动态创建???

            创建位置类型的对象,我们可以先写一个创建对象的函数,要求是任何类的对象都可以使用该函数去创建,也包括后来定义的类。(你给我哪个类这个函数就能创建这个类的对象,函数在类的定义之前)

       1.建一个win32控制台程序。

       2.将stdafx.h 添加头文件<afxwin.h>。

       3.Project-->Settings菜单项中设置使用MFC库

       4.编写代码:

    // DynCreate.cpp : Defines the entry point for the console application.
    //
    
    #include "stdafx.h"
    
    //定义支持动态创建的类
    class CAnimal:public CObject
    {
    	DECLARE_DYNCREATE(CAnimal)
    };
    
    IMPLEMENT_DYNCREATE(CAnimal,CObject)
    
    class CDog:public CAnimal
    {
    	DECLARE_DYNCREATE(CDog)
    };
    IMPLEMENT_DYNCREATE(CDog,CAnimal)
    
    //创建函数
    void CreateMyObject(CRuntimeClass *pClass)
    {
    	//创建对象
    	CObject *pObj = pClass->CreateObject();
    	printf("对象地址:%p\n",pObj);
    	printf("类的名称:%s\n",pClass->m_lpszClassName);
    
    }
    
    
    int main(int argc, char* argv[])
    {
    	CreateMyObject(RUNTIME_CLASS(CAnimal));
    	CreateMyObject(RUNTIME_CLASS(CDog));
    
    	return 0;
    }


    注意:

           1.  派生自CObject

            2.  添加动态创建的声明宏和实现宏

                 DECLARE_DYNCREATE(theClass)

                 IMPLEMENT_DYNCREATE(theClass,baseClass) 



    从语法角度来讲创建对象只有下边两种方式,那么我们上边的实质是哪种呢???

     ① 类名 对象名(参数)  

    ② 类名 对象名=new 类名(参数)   


    下边我们做个宏代换得到:

    // DynCreate.cpp : Defines the entry point for the console application.
    //
    
    #include "stdafx.h"
    //定义支持动态创建的类
    class CAnimal:public CObject
    {
    	DECLARE_DYNCREATE(CAnimal)
    };
    IMPLEMENT_DYNCREATE(CAnimal,CObject)
    
    class CDog :public CAnimal
    {
    	//DECLARE_DYNCREATE(CDog)
    	DECLARE_DYNAMIC(CDog) 
    	static CObject* PASCAL CreateObject();
    
    };
    //IMPLEMENT_DYNCREATE(CDog,CAnimal)
    CObject* PASCAL CDog::CreateObject() 
    { 
    	return new CDog; 
    } 
    //IMPLEMENT_RUNTIMECLASS(CDog, CAnimal, 0xFFFF, CDog::CreateObject)
    AFX_COMDAT const AFX_DATADEF 
    CRuntimeClass CDog::classCDog = { 
    	"CDog", sizeof(class CDog), 0xFFFF, 
    		CDog::CreateObject,//创建对象的函数地址 
    		RUNTIME_CLASS(CAnimal), 
    		NULL };
    CRuntimeClass* CDog::GetRuntimeClass() const 
    { 
    	return RUNTIME_CLASS(CDog); 
    } 
    
    //创建任意支持动态创建的类的对象
    void CreateMyObject(CRuntimeClass *pClass)
    {
    	//创建对象
    	CObject* pObj = pClass->CreateObject();
    	printf("对象地址:%p\n",pObj);
    	printf("类的名称:%s\n",pClass->m_lpszClassName);
    }
    int main(int argc, char* argv[])
    {
    	CreateMyObject(RUNTIME_CLASS(CAnimal));
    	CreateMyObject(RUNTIME_CLASS(CDog));
    	return 0;
    }
    

    分析:

    1. CDog有一个静态变量和一个虚函数:

    CreateObject()-----静态函数,创建该类的对象。

        classCDog-----类型是CRuntimeClass的静态变量,在运行时类信息时(上一篇中),pfnNewNULL

                             在动态创建时,它是CreateObject函数的地址。


    2. 对象时怎么创建出来的??? 在这行加断点调试CObject* pObj = pClass->CreateObject(); 我们可以看出:

    调用CRuntimeClass::CreateObject()函数
        在该函数中,首先判断,m_pfnCreateObject(CRuntimeClass的一个成员变量)是否为空,如果不为空,通过它调用CDog::CreateObject函数,在这个函数中,return new CDog;



    通俗的我们所定义的函数将就是根据运行时类信息,找到类的地址,然后new一个相应对象



    思考&提升:

    ①这种方式颠覆了我们传统的实例化对象的方式 
    ②有了动态创建,底层代码可以创建上层类(用户定义的类)的对象,


    展开全文
  • 首先得说明究竟什么是运行时类信息: 程序在运行时,得到对象的类信息以及所属类的继承层次关系。RTTI(Run-Time Type Information,运行时类型信息),下边通过一个例子来说明  1.建一个win32简单应用程序。  ...

          首先得说明究竟什么是运行时类信息: 程序在运行时,得到对象的类信息以及所属类的继承层次关系RTTI(Run-Time Type Information,运行时类型信息),下边通过一个例子来说明

       1.建一个win32控制台程序。

       2.将stdafx.h 添加头文件<afxwin.h>。

       3.Project-->Settings菜单项中设置使用MFC库

       4.编写代码:

    // Dynamic.cpp : Defines the entry point for the console application.
    //
    
    #include "stdafx.h"
    
    //定义支持运行时类信息的类
    class CAnimal:public CObject
    {
    	DECLARE_DYNAMIC(CAnimal)
    };
    IMPLEMENT_DYNAMIC(CAnimal,CObject)
    
    class CDog:public CAnimal
    {
    	DECLARE_DYNAMIC(CDog)
    };
    IMPLEMENT_DYNAMIC(CDog,CAnimal)
    
    
    
    int main(int argc, char* argv[])
    {
    	CDog dog;
    	if (dog.IsKindOf(RUNTIME_CLASS(CAnimal)))
    	{
    		printf("dog is a CAnimal !\n");
    
    	}else
    	{
    		printf("no no no !\n");
    	}
    
    	CRuntimeClass *pClass=dog.GetRuntimeClass();
    	printf("类的名称:%s\n",pClass->m_lpszClassName);
    	printf("类的大小:%d\n",pClass->m_nObjectSize);
    
    	return 0;
    }
    

    注意:

         1 派生自CObject

          2 添加动态创建的声明宏和实现宏

                 DECLARE_DYNCREATE(theClass)

                 IMPLEMENT_DYNCREATE(theClass,baseClass) 




    为什么上边的程序可以做判断和输出类信息???   我们来做个宏代换,结果如下

    // Dynamic.cpp : Defines the entry point for the console application.
    //
    #include "stdafx.h"
    //定义支持运行时类信息的类
    class CAnimal:public CObject
    {
    	DECLARE_DYNAMIC(CAnimal)
    };
    IMPLEMENT_DYNAMIC(CAnimal,CObject)
    class CDog:public CAnimal
    {
    	//DECLARE_DYNAMIC(CDog)
    public:
    	static const AFX_DATA CRuntimeClass classCDog; 
    	virtual CRuntimeClass* GetRuntimeClass() const; 
    
    };
    //IMPLEMENT_DYNAMIC(CDog,CAnimal)
    //IMPLEMENT_RUNTIMECLASS(CDog, CAnimal, 0xFFFF, NULL)
    AFX_COMDAT const AFX_DATADEF CRuntimeClass 
    CDog::classCDog = 
    {
    	"CDog", 
    	sizeof(class CDog), 
    	0xFFFF, 
    	NULL, 
    	RUNTIME_CLASS(CAnimal), 
    	NULL 
    }; 
    CRuntimeClass* CDog::GetRuntimeClass() const 
    { 
    	//return RUNTIME_CLASS(CDog); 
    	return ((CRuntimeClass*)(&CDog::classCDog));
    } 
    
    int main(int argc, char* argv[])
    {
    	//判断
    	CDog dog;
    	if(dog.IsKindOf(RUNTIME_CLASS(CWnd)))
    	{
    		printf("dog is  a CWnd!\n");
    	}
    	else
    	{
    		printf("dog is not a CWnd!\n");
    
    	}
    	//2 获取类的信息
    	CRuntimeClass *pClass=dog.GetRuntimeClass();
        printf("类的名称:%s\n",pClass->m_lpszClassName);
    	printf("类的大小:%d\n",pClass->m_nObjectSize);
    	return 0;
    }
    
    分析:

     1. CDog有一个静态变量和一个虚函数:

    classCDog-----类型是CRuntimeClass,的静态成员变量,保存本类信息和父类运行时类信息地址。

    GetRuntimeClass------虚函数,作用是返回classCDog的地址

    2. CRuntimeClass:用户可以使用该结构获取一个对象及其基类的运行时信息。

    struct CRuntimeClass
    {
    	LPCSTR m_lpszClassName;//类的名称
    	int m_nObjectSize;//类的大小
    	UINT m_wSchema; //类的版本 
    	CObject* (PASCAL* m_pfnCreateObject)(); //NULL 
    	CRuntimeClass* m_pBaseClass;//父类的运行时类信息变量的地址                         
    
        
    	...
    }
    结合我们编写的例子我们很容易看到,现在形成了一个类的信息链表,如下:
    CDog::GetRuntimeClass()
              |->&classCDog
                  |->类的名称,大小,版本等信息
                  |->&classCAnimal
                        |->CAnimal类的名称、大小、版本等信息
                        |->&classCObject
                             |->CObject类的名称、大小版本等
                              |->NULL 

    3. IsKindOf函数是怎么实现的???  加断点,f11进入函数内部,写出伪代码如下:

     BOOL CObject::IsKindOf(const CRuntimeClass* pClass) const
        {
             //classCDog的地址 
             CRuntimeClass* pClassThis = GetRuntimeClass();
             return pClassThis->IsDerivedFrom(pClass);
           pClassThis->IsDerivedFrom(pClass)
           {
                //classCDog的地址
                const CRuntimeClass* pClassThis = this;
    	    while (pClassThis != NULL)
    	    {
    		//比较
                    if (pClassThis == pBaseClass)
    			return TRUE;
            //获取父类的变量的地址
    		pClassThis = pClassThis->m_pBaseClass;
    	    }
    	   return FALSE; 
        }
      } 


    原理:
           调用GetRuntimeClass获取&classCDog

           调用IsDerivedFrom()函数,在函数中,把&classCDog与参数的&classCWnd比较,如果相等,返回TRUE,表示对象属于该类,如果不相等,获取&classCAnimal,继续循环比较,直到&classCObject的父类的变量地址为空,最后,返回FALSE,表示对象不属于该类。



    总结:

            其实简单的讲就是同通过GetRuntimeClass函数拿到本类的一个静态变量,该变量中保存这本类的信息,和父类的父类的运行时类信息变量的地址,形成一条类的信息链,通过遍历该链表查找类的信息。


        






    展开全文
  • :间隙锁(Next-Key锁)是什么

    千次阅读 2019-04-23 08:24:48
    当我们用范围条件而不是相等条件检索数据,并请求共享或排他锁时,InnoDB会给符合条件的已有数据记录的索引加锁 对于键值在条件范围内但并不存在的记录,叫做“间隙(GAP)”,InnoDB也会对这个“间隙”加锁,这种...

    本部分内容部分描述有误,晚些重写

     

    概述:

    当我们用范围条件而不是相等条件检索数据,并请求共享或排他锁时,InnoDB会给符合条件的已有数据记录的索引项加锁

    对于键值在条件范围内但并不存在的记录,叫做“间隙(GAP)”,InnoDB也会对这个“间隙”加锁,这种锁机制就是所谓的间隙锁(Next-Key锁)【行锁+gap锁】


    实例:

    假如emp表中只有101条记录,其empid的值分别是 1,2,...,100,101,下面的SQL:

    mysql> select * from emp where empid > 100 for update;

    是一个范围条件的检索,InnoDB不仅会对符合条件的empid值为101的记录加锁,也会对empid大于101(这些记录并不存在)的“间隙”加锁。(如果where条件全部命中,则只会添加记录锁,如果部分命中或者全部命中,则会加Gap锁


    InnoDB使用间隙锁的目的:

    1.防止幻读,以满足相关隔离级别的要求。对于上面的例子,要是不使用间隙锁,如果其他事务插入了empid大于100的任何记录,那么本事务如果再次执行上述语句,就会发生幻读;

    2.为了满足其恢复和复制的需要


    间隙锁的缺点:

    性能缺陷:很显然,在使用范围条件检索并锁定记录时,即使某些不存在的键值也会被锁定,而造成在锁定的时候无法插入锁定键值范围内的任何数据,造成性能丢失

    除了间隙锁给InnoDB带来性能的负面影响之外,通过索引实现锁定的方式还存在其他几个较大的性能隐患:

    (1)当Query无法利用索引的时候,InnoDB会放弃使用行级别锁定而改用表级别的锁定,造成并发性能的降低;

    (2)当Query使用的索引并不包含所有过滤条件的时候,数据检索使用到的索引键所只想的数据可能有部分并不属于该Query的结果集的行列,但是也会被锁定,因为间隙锁锁定的是一个范围,而不是具体的索引键;

    (3)当Query在使用索引定位数据的时候,如果使用的索引键一样但访问的数据行不同的时候(索引只是过滤条件的一部分),一样会被锁定。

    因此,在实际应用开发中,尤其是并发插入比较多的应用,我们要尽量优化业务逻辑,尽量使用相等条件来访问更新数据,避免使用范围条件。

    还要特别说明的是,InnoDB除了通过范围条件加锁时使用间隙锁外,如果使用相等条件请求给一个不存在的记录加锁,InnoDB也会使用间隙锁。

     

     

    展开全文
  • 每层分别完成一核心功能,并运用了一些技术来保证整个区块链系统的正常运作,各层之间互相配合互相支撑,实现一个去中心化的信任机制,这也区块链的魅力所在。本文由mkz888z方面整理发布 但通过小张的学习和...

    区块链的基础架构,可分为六个层面:从底层向上依次为:数据层、网络层、共识层、激励层、合约层、应用层。每层分别完成一项核心功能,并运用了一些技术来保证整个区块链系统的正常运作,各层之间互相配合互相支撑,实现一个去中心化的信任机制,这也是区块链的魅力所在。本文由mkz888z方面整理发布

    但通过小张的学习和诸多资料中总结,认为还有一个底层结构:加密层,也是区块链技术的基石,提供了整个区块链系统的安全性、匿名性的保证。但加密层中一些加密技术,实在烧脑,为了便于非专业人士的理解,还是以大多数的数据中将加密层融合在数据层中,进行简单介绍,或关注后续文章。

    区块链的层级架构

    1.数据层:包含了底层数据区块以及基础数据、基本算法等。

    数据层主要描述区块链技术的物理形式,是区块链上从创世区块起始的链式结构,每个区块包含了区块上的随机数、时间戳、公私钥数据等,是整个区块链技术中最底层的数据结构。

    2.网络层:包括分布式组网机制、数据传播机制和数据验证机制等

    网络层的主要目的是实现区块链网络中节点之间的信息交流。网络层主要通过P2P技术实现分布式网络的机制,网络层包括 P2P 组网机制、数据传播机制和数据验证机制,因此区块链本质上是一个P2P(点对点)网络,具备自动组网的机制,节点之间通过维护一个共同的区块链结构来保持通信。每一个节点既接收信息,也产生信息。

    3.共识层:主要包含共识算法以及共识机制,

    负责点对点模式的有效识别认证;共识层能让高度分散的节点在去中心化的区块链网络中高效地针对区块数据的有效性达成共识,是区块链的核心技术之一,也是区块链社群的治理机制。区块链中比较常用的共识机制主要有:工作量证明、权益证明和股份授权证明三种。

    数据层、网络层、共识层是构建区块链技术的必要元素,也是核心层,缺少任何一层都不能称之为真正意义上的区块链技术。

    4.激励层:主要包括经济激励的发行制度和分配制度。

    激励层的主要功能是提供一定的激励措施,鼓励节点参与区块链的安全验证工作。

    激励机制在公有链中是必需的。在联盟链中,所有节点都是已经经过组织认证的节点,不需要额外的激励,这些节点也会自发地维护整个系统的安全和稳定。

    在公有链中,节点不需要进行认证,可以随时加入、随时退出这个网络,记账需要消耗CPU、存储、带宽等资源,所以需要有一定的激励机制来确保矿工在记账的过程中能有收益,以此来保证整个区块链系统朝着良性循环的方向发展。

    以比特币为例,它的奖励机制有两种:1.在比特币总量达到2100万枚之前,新区块产生后系统奖励的比特币和每笔交易扣除的比特币(手续费)。2.当比特币总量达到2100万枚时,新产生的区块将不再生成比特币,这时奖励机制主要是每笔交易中扣除的手续费。

    5.合约层:主要包括各种脚本、代码、算法机制及智能合约。

    合约层是区块链可编程的基础。负责规定交易方式和流程细节:区块链可以理解为是去中心化不可篡改的账本,程序代码也是数据,也可以存到账本里。智能合约是存储在区块链中的一段不可篡改的程序,可以自动化地执行一些预先定义好的规则和条款,响应接收到的信息。合约发布之后,其运行和维护就交给全网的矿工去达成共识,是区块链去信任的基础。

    6.应用层:负责实现生活的各类应用场景。包含了各种应用场景和案例。

    比如搭建在以太坊、EOS上的各类区块链技术应用,即部署在应用层,并在现实生活场景中落地,来丰富整个区块链的生态。而未来的可编程金融和可编程社会也将会是搭建在应用层。

    激励层、合约层和应用层不是每个区块链应用的必要因素,一些区块链应用并不完整包含此三层结构。本文由mkz888z方面整理发布

    展开全文
  • 思科 CCNA2 第章测验答案

    千次阅读 2020-05-21 17:09:46
    1.思科设备 LAN 接口上使用的默认队列方法是什么? 选择一: FIFO WFQ CBWFQ LLQ 反馈 Refer to curriculum topic: 6.1.3 除非配置一个队列方法,否则 FIFO 是思科设备接口上使用的默认队列方法,速度为 2.048 mbps...
  •  今天又是周末,我们来看看java的复用机制是什么情况。大家知道,代码复用非常实用,这特性是java的一个重要的部分。那java用什么来实现的复用呢?是组合和继承。当然还有代理机制,但是不是很常用,因此我们暂时...
  • 什么是存储过程 ​ 存储过程一组为了完成某特定功能的SQL语句集,其实质就是一段存储在数据库中的代码。它可以由声明式的sql语句和过程式sql语句组成。 优点 1. 可以增强sql语言的功能和灵活性 2. 良好的...
  • 在当今的这个社会中,所有的行业都会有自己的规章制度来进行约束,正所谓无规矩不成方圆,shopee也如此,如果你违反了其中的一规定,就会受到相应的惩罚,许多人都想了解shopee的扣分机制,多少分才会冻结店铺,...
  • 本篇我们介绍可迭代对象和迭代器对象--包括两者的定义及区别、为什么要有迭代器对象,其的用法怎么样的 和 for循环的机制,当然还有生成器的介绍,这里还会介绍列表生成器,三元运算式等。 一、迭代器对象  1、...
  • shuffleSpark重新分发数据的机制,以便在分区之间进行不同的分组。这通常涉及跨执行者和机器复制数据,使得洗牌成为一复杂而昂贵的操作。 为了理解洗牌过程中会发生什么,我们可以考虑reduceby by key操作的例子...
  • linux基础命令学习

    2015-09-16 00:26:48
    首先学习linux命令之前,先来了解一下操作系统是什么,操作系统是管理和控制计算机硬件和软件资源的一个平台,而内核作为操作系统的核心主要有六项功能: 1、进程管理 2、内存管理 3、文件系统 4、网络功能 5、硬件...
  • 第八篇 迭代器协议和生成器 ...二 什么是迭代器协议 ...三 python中强大的for循环机制 ...1.迭代器协议指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一,要么就引起一个StopIt...
  • 行动后反思(AAR: After Action Review)是美国陆军提出的一学习方法。其目的在于学习,而不是奖惩;...步骤一:当初行动的意图是什么(What was the intent):当初行动的意图或目的为何?当初行动时尝...
  • Jakarta Struts 编程.pdf

    2011-07-21 07:46:55
    什么是java servlet? 10 jsp页面 13 jsp model 1和model 2架构 15 为什么mvc如此重要? 16 什么是框架? 18 其他替代框架 20 第二章 web层剖析 25 框架概述 25 http请求/响应的过程 29 struts和作用域 34 ...
  • Linux内核源码+电子书

    热门讨论 2011-02-21 15:13:10
    10.1.1 什么是模块 10.1.2 为什么要使用模块? 10.2 实现机制 10.2.1 数据结构 10.2.2 实现机制的分析 10.3 模块的装入和卸载 10.3.1 实现机制 10.3.2 如何插入和卸载模块 10.4 内核版本 10.4.1 内核版本与...
  • 10.1.1 什么是模块 10.1.2 为什么要使用模块? 10.2 实现机制 10.2.1 数据结构 10.2.2 实现机制的分析 10.3 模块的装入和卸载 10.3.1 实现机制 10.3.2 如何插入和卸载模块 10.4 内核版本 10.4.1 内核版本与...
  • 27、GC是什么? 为什么要有GC?  GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象...
  • 淘宝客这技术是什么实现的? :ramen:工具使用 三歪给女朋友讲解什么是Git 三歪建议 去工作之前 最好学学Git 我采访了同事,让他掏出了每天都会浏览的干货网站 花了一天整理了一些我常用的工具 拿到一台新的...
  • 既然Windows通过消息机制进行通讯的,那么我们就可以通过截获一些有用的消息来美化我们的界面,以下一些有用的Windows消息: WM_PAINT WM_ERASEBKGND WM_CTLCOLOR* WM_DRAWITEM* WM_MEASUREITEM* NM_...
  • (你个性上最大的特点是什么?) A:Helpfulness and caring.(乐于助人和关心他人。) A:Adaptability and sense of humor.(适应能力和幽默感。) A:Cheerfulness and friendliness.(乐观和友爱。) Q: How ...
  • 需求分析阶段的基本任务是什么? 答: 需求分析是当前软件工程中的关键问题,需求分析阶段的任务是:在可行性分析的基础上,进一步了解、确定用户需求。准确地回答 “系统必须做什么?” 的问题。获得需求规格说 ...
  • 或者说贵公司的晋升机制是什么样的?企业将很欢迎,因为体现出你对学习的热情和对公司的忠诚度以及你的上进心。 9、如果通过这次面试我们单位录用了你,但工作一段时间却发现你根本不适合这个职位,你怎么办?  ...
  • java 面试题 总结

    2009-09-16 08:45:34
    24、GC是什么? 为什么要有GC?  GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象...
  • 4.1 什么是MFC 以及MFC 的特点 (例子代码EX04-00) 4.2 MFC 应用程序框架 (例子代码EX04-01) 4.3 应用程序框架说明 4.4 文档-视图体系结构 4.4.1 文档-视图相互作用的函数 4.4.2 单文档-视图应用程序结构 ...
  • 解决方法:这可能系统的兼容性问题,winXP的系统,右键“AutoRun.exe”文件,属性,兼容性,把“用兼容模式运行这个程序”选择上,并选择“Windows 98/Me”。win2000如果打了SP的补丁后,只要开始,运行,输入:...
  • Unix/Linux 编程实践教程.PDF

    千次下载 热门讨论 2010-09-03 18:34:12
    6.4.2 信号是什么 6.4.3 进程该如何处理信号 6.4.4 信号处理的例子 6.5 为处理信号做准备:play_again4.c 6.6 进程终止 6.7 为设备编程 小结 第七章 事件驱动编程:编写一个视频游戏 7.1 视频游戏和操作系统 ...
  • JAVA面试题最全集

    2010-03-13 13:09:10
    87.UNIX中QT是什么意思? 88.在软件开发生命周期中的哪个阶段开始测试? 89.dotnet与J2EE的比较? 90.什么是ActiveX? 91.Java中IDL是什么? 92.ISO9000和CMM是什么?IS09000和CMM(软件能力成熟度模型)认证是国际上...
  • 深入浅出MFC【侯捷】

    2015-06-10 09:07:42
    正确态度 MFC多线程程序设计 探索CWinThread 产生一个Worker Thread 产生一个UI Thread 线程的结束 线程与同步控制 MFC多线程程序例程 第15章 定制一个AppWizard 到底Wizard是什么? Custom AppWizard的基本操作 ...
  • 软件工程教程

    热门讨论 2012-07-06 23:10:29
    问:开发这个软件目标是什么? 答: 提高用户对音乐的学习和娱乐 参与创作音乐 项目背景--钢琴练奏师 问:为什么传统音乐程序不好? 答: 传统音乐程序功能单一,容易令人感到枯燥无味,没有吸引力; 传统音乐...

空空如也

空空如也

1 2 3 4 5
收藏数 92
精华内容 36
关键字:

六项机制是什么