自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

I Belivs I Can!

一直在努力,从不言放弃!

  • 博客(43)
  • 资源 (25)
  • 收藏
  • 关注

转载 HashMap实现原理分析

1. HashMap的数据结构数据结构中有数组和链表来实现对数据的存储,但这两者基本上是两个极端。      数组数组存储区间是连续的,占用内存严重,故空间复杂的很大。但数组的二分查找时间复杂度小,为O(1);数组的特点是:寻址容易,插入和删除困难;链表链表存储区间离散,占用内存比较宽松,故空间复杂度很小,但时间复杂度很大,达O(N)。链表的特点是:寻址困难

2017-02-25 23:41:14 154

转载 java5、java6、java7、java8的新特性

Java5:1、泛型 Generics:        引用泛型之后,允许指定集合里元素的类型,免去了强制类型转换,并且能在编译时刻进行类型检查的好处。        Parameterized Type作为参数和返回值,Generic是vararg、annotation、enumeration、collection的基石。        A、类型安全   

2017-02-25 23:35:59 177

原创 Java中ArrayList源码

/* * @(#)ArrayList.java 1.56 06/04/21 * * Copyright 2006 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */package java.util;/**

2017-02-25 23:32:47 223

原创 Java集合HashMap源码

/* * @(#)HashMap.java 1.73 07/03/13 * * Copyright 2006 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */package java.util;import

2017-02-25 23:28:36 176

原创 单例模式和多线程

在标准的23中设计模式中单例模式是应用最多的。(1)      立即加载/饿汉模式立即加载就是使用类的时候已经将对象创建完毕,常见的实现方法就是直接new实例化。public class MyObject { // 单利模式饿汉模式 private static MyObject myObject = new MyObject(); private MyObject() {

2017-02-25 23:17:37 230

原创 定时器Timer

定时任务在Java中主要使用的就是Timer对象,它在内部还是使用多线程的方式处理,所以它和线程技术还有有非常大的关系。在JDK库中,Timer类主要负责计划任务的功能,也就是在指定的时间开始执行某一个任务。Timeter主要作用就是设置计划任务,但封装任务的类确实TimerTask类,执行计划任务的代码要放入TimerTask的子类中,因为TimerTask是一个抽象类。核心方法:s

2017-02-25 23:09:36 323

转载 redis与memcached比较

Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。        redis是一个key-value存储系统,是一个高性能的key-value数据库。在考虑对应用程序的性能表现进行提升时,缓存机制往往是解决问题的重要起点,而Memcached与Redi

2017-02-24 19:50:07 171

转载 Redis

Redis的崛起绝非偶然,它确实有自己的新东西在里面,它不像Memcached,只能将数据存储在内存中,它提供了持久化机制,避免了場机后的雪崩的问题,即服务器出现问题后,内存中保留的原始数据全部丢失,需要重新组织数据到内存,这时,Memcached会经历一个很慢的过程。Redis支持持久化只是它的一件武器,另外,它针对不同的需求也提供了多达5种数据存储方式,以最大效率上的实现你的需求,下面

2017-02-24 19:47:51 181

转载 Hibernate与Mybatis比较

我是一名Java开发人员,hibernate以及mybatis都有过学习,在java面试中也被提及问道过,在项目实践中也应用过,现在对hibernate和mybatis做一下对比,便于大家更好的理解和学习,使自己在做项目中更加得心应手。第一方面:开发速度的对比就开发速度而言,Hibernate的真正掌握要比Mybatis来得难些。Mybatis框架相对简单很容易上手,但也相对简陋些

2017-02-24 19:40:14 168

原创 线程状态切换

1)      新创建一个新的线程对象后,在调用它的start()方法,系统就会为此线程分配CPU的资源,是其处于Runnable(可运行)状态,这一个准备运行的阶段。若果线程强占到CPU资源,此线程就处于Running(运行)状态。2)      Runnable状态和Running转态可相互切换,因为有可能线程运行一段时间后,有其它优先级的线程抢占到了CPU资源,这是线程就从Running

2017-02-23 23:03:47 356

原创 线程间通信

(1)      使用wait/notify实现线程间的通信Wait()方法的作用是:使当前执行代码的线程进行等待,是object类的一个方法,该方法用来将当前线程置入预执行队列中,并且在wait()所在的代码行处停止执行,知道接到通知或被中断为止。在调用wait()方法之前,线程必须获得该对象的对象级别的锁,即只能在同步方法或同步块中调用wait()方法。在执行wait()方法后,当前线

2017-02-23 23:00:32 202

原创 Java中访问修饰符public、private、protect、default范围

同一个类同一个包不同包的子类不同包的非子类Private√   Default√√  Protected√√

2017-02-20 23:20:32 367

原创 Java线程中对象及变量的并发访问

(1)非线程安全问题存在于实例变量中,如果方法内部的私有变量,则不存在非线程安全的问题,所得结果也就是线程安全的了。方法中的变量不存在线程安全问题,永远都是线程安全的,这是方法内部的变量是私有的特性所造成的。(2)在两个线程访问同一个对象中的同步方法是一定是线程安全。(3)调用关键字synchronized声明的方法一定是排队运行的,要牢记共享这两个字,只有共享资源的读写访问才需要同步化,

2017-02-20 23:13:00 190

原创 Spring MVC基本原理

SpringMVC是Spring的一个后续产品,其实就是spring在原有基础上,又提供了web应用的MVC模块,可以简单的把SpringMVC理解为是Spring的一个模块(类似AOP,IOC这样的模块),网络上经常会说SpringMVC和Spring无缝集成,其实SpringMVC就Spring的一个子模块,所以根本不需要同Spring进行整合。第一:工作原理     1)

2017-02-20 21:15:54 396

原创 Java线程中的volatile和synchronized的比较

1)关键字volatile是线程同步的轻量级实现,所以volatile性能肯定比synchronized要好,并且volatile只能修饰变量,而synchronized可以修饰方法,以及代码块。随着jdk新版本的发布,synchronized关键字在执行效率上得到了很大的提升,在开发中使用synchronized关键字的比率还是比较大。2)多线程访问volatile不会发生阻塞,而synch

2017-02-20 15:45:39 210

转载 insert into from与select into from

1.INSERT INTO SELECT语句 语句形式为:Insert into Table2(field1,field2,...) select value1,value2,... from Table1 要求目标表Table2必须存在,由于目标表Table2已经存在,所以我们除了插入源表Table1的字段外,还可以插入常量。2.SELECT INTO FROM语

2017-02-20 10:39:01 1383

原创 线程Thread的类的核心方法

(1)      实现线程的方法1)  继承Thread类2)  实现Runnable接口(2)      启动线程的方法(start)start()方法的顺序并不代表线程启动的顺序。currentThread()方法可返回代码段正在被哪个线程调用的信息。isAlive()方法判断当前的线程是否处于活动的状态。什么是活动状态就是线程已经启动且尚未终止。线程处于正在运行或者准

2017-02-18 12:35:25 306

原创 抽象类和接口的区别

(1)定义上:抽象类:具有抽象方法的类称为抽象类,用abstract修饰。特点:1)抽象类中的抽象方法用abstract修饰,也可以有普通的方法。              2)抽象类被子类继承,子类(如果不是抽象类)必须重写抽象类中的所有抽象方法             3)抽象类不能被直接实例化,要通过其子类进行实例化             4)只要包含一个抽象方法的抽象

2017-02-17 10:11:52 163

转载 Java中常用的线程池

Java通过Executors提供四种线程池,分别为:newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。

2017-02-16 16:03:43 178

转载 SpringIOC原理

http://blog.csdn.net/he90227/article/details/51536348

2017-02-16 15:25:05 1272

转载 乐视秒杀:每秒十万笔交易的数据架构解读

http://blog.csdn.net/he90227/article/details/52384780

2017-02-16 14:35:20 317

原创 Oracle10g分区和Mysql分区区别

Oracle10g分区常用的是:range(范围分区)、list(列表分区)、hash(哈希分区)、range-hash(范围—哈希分区)、range-list(列表—复合分区)。Range分区:Range分区是应用范围比较广的表分区方式,它是以列的值的范围来做为分区的划分条件,将记录存放到列值所在的range分区中。       如按照时间划分,2010年1月的数据放到a分区,2月的

2017-02-15 14:51:51 622

原创 Oracle大量数据的优化2

1.数据库表设计方面  1)遵循范式规则  2)数据行的长度不要超过8020字节,如果超过这个长度的话在物理页中这条数据会占用两行从而造成存储碎片,降低查询效率。3)能够用数字类型的字段尽量选择数字类型而不用字符串类型的(电话号码),这会降低查询和连接的性能,并会增加存储开销。这是因为引擎在处理查询和连接回逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了。  4)对

2017-02-15 14:19:44 479

转载 Oracle数据库表分区

Oracle 分区功能可以提高许多应用程序的可管理性、性能与可用性。通过分区功能,可以将表、索引和索引组织表进一步细分为段,从而能够更精确地管理和访问这些数据库对象。Oracle 提供了种类繁多的分区方案以满足每种业务要求。而且,因为在 SQL 语句中分区是完全透明的,所以该功能几乎可应用于任何应用程序。分区功能的优势分区功能通过改善可管理性、性能和可用性,从而为各式应用程序带来了极大

2017-02-15 14:03:49 386

原创 Oracle中union与unionAll区别

1.定义:union:两个结果集进行并集操作, 不包括重复行,相当于distinct, 同时进行默认规则的排序。unionAll:对两个结果集进行并集操作, 包括重复行, 即所有的结果全部显示, 不管是不是重复。2.总结(1)因为union all仅仅是简单的合并查询结果, 并不会做去重操作, 也不会排序, 所以union all效率要比union高.。所以在能

2017-02-15 11:13:26 1292

转载 Oracle数据库索引失效

1.隐式转换导致索引失效.这一点应当引起重视.也是开发中经常会犯的错误.  由于表的字段tu_mdn定义为varchar2(20),但在查询时把该字段作为number类型以where条件传给Oracle,这样会导致索引失效. 错误的例子:select * from test where tu_mdn=13333333333; 正确的例子:select * from test where

2017-02-15 10:59:02 684

转载 数据库SQL优化大总结

1.对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from t where num is null最好不要给数据库留NULL,尽可能的使用 NOT NULL填充数据库.备注、描述、评

2017-02-15 10:57:27 164

原创 jvm类加载机制

代码编译从本地机器码转变为字节码,是存储格式发展的一小步,却是编程语言发展的一大步。在java语言中类的加载、连接和初始化过程都是在程序运行期间完成的。         虚拟机的类加载机制:虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,并最终形成可以被虚拟机直接使用的java类型。       类的加载生命周期包括:加载(Loading)、验证(Ver

2017-02-14 14:35:25 161

原创 Mybatis的基本运行原理

Mybatis的运行分为两部分,第一部分是读取配置文件缓存到Coufiguration对象,用以创建SqlSessionFactory,第二部分是SqlSession的执行过程。Mybatis实现的基本原理是利用:动态代理和反射机制。动态代理中用到JDK动态代理和CGLIB代理。这两者的区别是,JDK动态代理是接口的,CGLIB代理是对于类的。Mybatis中这两种代理都用到过,Mapper中

2017-02-13 23:23:54 11098 1

原创 Java中垃圾回收器

垃圾收集器(GrabageCollection,GC),主要是对堆进行回收,要确定哪些对象还存活着,哪些已经死去了。判断对象是否已经死了常用算法:引用计数算法:给对象添加一个引用计数器,每当有一个地方引用它时,它的计数器值就会增加1,当引用失效时,计数器就会减1,任何时刻计数器为0的对象就是不可能在被使用。主流的Java虚拟机中没有使用该方法来管理内存,主要原因是很难解决对象之间相互引

2017-02-13 16:10:55 212

原创 Java内存区域

1.Java内存区域与内存溢出异常Java运行时的数据区域:方法区、堆、虚拟机栈、本地方法栈和程序计数器。方法区和堆是线程共享的数据区,虚拟机栈、本地方法栈和程序计数器是线程私有的。1)程序计数器(ProgramCounter Register):定义:可以看做是当前线程所执行的字节码的行号指示器。特点:线程私有,较小的内存。异常:此区域是唯一一块没有规定OutOfMe

2017-02-13 15:15:08 215

原创 Executor框架

Java中线程即是工作单元,也是执行单元。从jdk5开始,把工作单元与执行单元机制分离开来。工作单元包括:Runnable和Callable,执行单元由Executor框架提供。1.      Executor框架组成部分(1)      任务:Runnable接口和Callable接口(2)      任务的执行:核心接口(Executor),以及继承自Executor的Execut

2017-02-12 22:40:39 221

原创 java中线程池

(1)使用线程池的好处:1.      降低资源的消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。2.      提高响应的时间。当任务到达时,任务可以不需要等到线程创建就能立即执行。3.      提高线程的可管理性。线程是稀缺资源,如果无限制地创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以统一分配、调优和监控。(2)线程池的实现原理:1.线程池判

2017-02-12 21:35:14 413

原创 Java中锁

java中锁      在Javase5后在并发包下新增了Lock接口,用来实现锁的功能,它提供了与synchronized关键字类似的同步功能,在使用时需要显示地获取和释放锁。Lock接口的实现类是ReentrantLock。Lock接口的常用方法:void lock ()方法:获得锁,当前线程获得锁从该方法返回。void lockInterruptibly()throwsI

2017-02-12 15:46:08 184

原创 Spring Bean生命周期2

Spring中Bean的管理周期一般就是以IOC容器来管理,一般担当管理者角色的是BeanFactory或ApplicationContext。下面以Beanfactory为列来介绍一下Bean的生命周期。1.Bean的创建:由BeanFactory读取Bean定义文件,并生成各个实例。2.Bean的set注入:执行Bean的属性依赖注入。3.BeanNameAware的setName

2017-02-10 14:40:35 179

转载 Spring中bean生命周期

Spring作为当前Java最流行、最强大的轻量级框架,受到了程序员的热烈欢迎。准确的了解Spring Bean的生命周期是非常必要的。我们通常使用ApplicationContext作为Spring容器。这里,我们讲的也是 ApplicationContext中Bean的生命周期。而实际上BeanFactory也是差不多的,只不过处理器需要手动注册。 转载请注明地址 http://www.c

2017-02-10 09:28:29 242

原创 Mybatis插件

1.插件接口:在Mybatis中使用插件的时候,就必须实现Interceptor接口。public interface Interceptor{         Objectintercept(Invocation invocation) throws Throwable;         Objectplugin (Object target);         voidse

2017-02-09 21:48:49 221

原创 MQ

为什么会需要消息队列(MQ)?主要原因是由于在高并发环境下,由于来不及同步处理,请求往往会发生堵塞,比如说,大量的insert,update之类的请求同时到达mysql,直接导致无数的行锁表锁,甚至最后请求会堆积过多,从而触发too many connections错误。通过使用消息队列,我们可以异步处理请求,从而缓解系统的压力。

2017-02-09 17:48:34 197

原创 Springmvc 工作原理

简析springmvc 工作原理    1.启动服务器,根据web.xml的配置加载前端控制器(也称总控制器) DispatcherServlet 。在加载时会完成一系列的初始化动作。    2.根据servlet的映射请求(上面的HelloWorld实例中针对.do 请求),并参照“控制器配置文件”(即springMVC-servlet.xml 这样的配置文件),把具体的请求分发给特定的

2017-02-09 17:35:28 160

原创 Oracle灾备方案

Oracle灾备:一般方法:Data Guard、GoldenGate和CDP角度。 Oracle Data Guard:提供了一种数据同步技术来实现Oracle的高可用性、增强的性能以及自动的故障转移方案,为主数据库创建和维护多个备用数据库,主数据库的改变能够自动将信息从主数据库传送到备用数据库,并保证在此过程中没有信息的丢失。Data Guard有两种类型的备用数据库:物理备用和逻辑备

2017-02-09 17:16:13 5735

oracle修改字符集

4.修改Oracle的编码和操作系统的一样。(参考别人的) 登陆用dba SQL> conn system/hundsun as sysdba; 停掉数据库 SQL>shutdown immediate; 启动数据库到mount状态下 SQL> STARTUP MOUNT; Java代码 收藏代码 ORACLE instance started. Total System Global Area 76619308 bytes Fixed Size 454188 bytes Variable Size 58720256 bytes Database Buffers 16777216 bytes Redo Buffers 667648 bytes Database mounted. SQL> ALTER SESSION SET SQL_TRACE=TRUE; Session altered. SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION; System altered. SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0; System altered. SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0; System altered. 启动数据库 SQL> Alter database open; 设置字符集 SQL> ALTER DATABASE CHARACTER SET ZHS16GBK; 先把数据库中的有中文乱码的清空了。 然后在执行。这是有可能报错 执行这个ALTER DATABASE character set INTERNAL_USE ZHS16GBK; 跳过字符集检查 关闭数据库 SQL> Shutdown immediate; 重启 SQL> startup;

2018-10-11

Myeclipse中导入工程步骤

在myeclipse下,myeclipse导入web工程的一本步骤和方法

2018-01-12

myeclipse项目转换成eclipse

myeclipse项目转换成eclipse,将web工程转化到eclipse下

2018-01-11

ppl-0.10.2-11.el6.i686.rpm

在linux下安装gcc所需要的离线安装包,针对的是linux系统是32位

2018-01-11

redis配置文件

Redis配置文件的例子 #单位注意:当需要内存大小时,可以指定 它通常以1k 5GB 4M的形式出现,依此类推: # #1k => 1000字节 #1kb => 1024字节 #1m => 1000000字节 #1mb => 1024 * 1024字节 #1g => 1000000000字节 #1gb => 1024 * 1024 * 1024字节 # #单位不区分大小写,所以1GB 1Gb 1GB都是一样的。

2018-01-11

struts2+MySQL+jfreechart生成带热点

struts2+MySQL+jfreechart生成带热点

2015-01-25

struts2+mysql+jfreechart

用struts2+mysql+jfreechart来开发图形展示

2015-01-23

EasyARM283移植sqlite3

详细介绍在EasyARM283移植sqlite3的全过程

2014-05-27

安卓手机短信发不出去设置方法

本文档详细介绍了安卓手机短信发不出去设置方法,可以解决发不出短信的问题

2013-12-15

myeclipse9.0M1安装SVN插件档

myeclipse9.0M1的安装SVN插件的详细步骤

2013-11-09

C函数速查 chm

C函数速查手册,可以快速的查找常用的C语言函数

2013-10-28

Linux下的makefile的

Linux下的makefile的编程指南,本文详细介绍了Linux下的makefile如何使用

2013-10-28

GMSK基带调制解调的实现

GMSK基带调制解调的实现

2013-09-19

VMware序列号

在安装VMware时候,VMware序列号

2013-09-19

VMware独品入门教程

VMware独品入门教程,详细讲述VMware安装过程

2013-09-19

QrCodeTest.rar

本代码是2维码,用MFC写的,大家可以参考啊

2013-07-16

javaweb.ppt

本文详细讲解了如何用myeclipse+tomcat开发web,对初学web开发环境的搭建帮助很大

2013-07-16

eclipse中常用配置

本文讲解了eclipse中常用配置,对初学eclipse的帮助很大啊

2013-07-16

( 数字图像处理与模式识别

、如何让机器自动进行模式识别? 模式识别的定义:根据对某个物理对象的观测信息,利用计算机对该物理对象进行分类,从而给出该物理对象所属的类别。在这里,“模式”就是指存储于计算机内的有关物理对象的观测信息,它可以是图像、声音、温度、压力等任何可以测量的观测量。为了让机器自动完成模式识别任务,我们需要(1)数据采集设备(2)模式识别算法

2013-07-07

joffice文档

// Chat.cpp : 定义应用程序的类行为。 // #include "stdafx.h" #include "Chat.h" #include "ChatDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #endif // CChatApp BEGIN_MESSAGE_MAP(CChatApp, CWinApp) ON_COMMAND(ID_HELP, &CWinApp::OnHelp) END_MESSAGE_MAP() // CChatApp 构造 CChatApp::CChatApp() { // 支持重新启动管理器 m_dwRestartManagerSupportFlags = AFX_RESTART_MANAGER_SUPPORT_RESTART; // TODO: 在此处添加构造代码, // 将所有重要的初始化放置在 InitInstance 中 } // 唯一的一个 CChatApp 对象 CChatApp theApp; // CChatApp 初始化 BOOL CChatApp::InitInstance() { // 如果一个运行在 Windows XP 上的应用程序清单指定要 // 使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式, //则需要 InitCommonControlsEx()。否则,将无法创建窗口。 INITCOMMONCONTROLSEX InitCtrls; InitCtrls.dwSize = sizeof(InitCtrls); // 将它设置为包括所有要在应用程序中使用的 // 公共控件类。 InitCtrls.dwICC = ICC_WIN95_CLASSES; InitCommonControlsEx(&InitCtrls); CWinApp::InitInstance(); if(!AfxSocketInit()) { AfxMessageBox(_T("加载套接字库失败!")); return FALSE; } AfxEnableControlContainer(); // 创建 shell 管理器,以防对话框包含 // 任何 shell 树视图控件或 shell 列表视图控件。 CShellManager *pShellManager = new CShellManager; // 标准初始化 // 如果未使用这些功能并希望减小 // 最终可执行文件的大小,则应移除下列 // 不需要的特定初始化例程 // 更改用于存储设置的注册表项 // TODO: 应适当修改该字符串, // 例如修改为公司或组织名 SetRegistryKey(_T("应用程序向导生成的本地应用程序")); CChatDlg dlg; m_pMainWnd = &dlg; INT_PTR nResponse = dlg.DoModal(); if (nResponse == IDOK) { // TODO: 在此放置处理何时用 // “确定”来关闭对话框的代码 } else if (nResponse == IDCANCEL) { // TODO: 在此放置处理何时用 // “取消”来关闭对话框的代码 } // 删除上面创建的 shell 管理器。 if (pShellManager != NULL) { delete pShellManager; } // 由于对话框已关闭,所以将返回 FALSE 以便退出应用程序, // 而不是启动应用程序的消息泵。 return FALSE; }

2013-04-14

VC chat.cpp

VC做的聊天小程序 // Chat.cpp : 定义应用程序的类行为。 // #include "stdafx.h" #include "Chat.h" #include "ChatDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #endif // CChatApp BEGIN_MESSAGE_MAP(CChatApp, CWinApp) ON_COMMAND(ID_HELP, &CWinApp::OnHelp) END_MESSAGE_MAP() // CChatApp 构造 CChatApp::CChatApp() { // 支持重新启动管理器 m_dwRestartManagerSupportFlags = AFX_RESTART_MANAGER_SUPPORT_RESTART; // TODO: 在此处添加构造代码, // 将所有重要的初始化放置在 InitInstance 中 } // 唯一的一个 CChatApp 对象 CChatApp theApp; // CChatApp 初始化 BOOL CChatApp::InitInstance() { // 如果一个运行在 Windows XP 上的应用程序清单指定要 // 使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式, //则需要 InitCommonControlsEx()。否则,将无法创建窗口。 INITCOMMONCONTROLSEX InitCtrls; InitCtrls.dwSize = sizeof(InitCtrls); // 将它设置为包括所有要在应用程序中使用的 // 公共控件类。 InitCtrls.dwICC = ICC_WIN95_CLASSES; InitCommonControlsEx(&InitCtrls); CWinApp::InitInstance(); if(!AfxSocketInit()) { AfxMessageBox(_T("加载套接字库失败!")); return FALSE; } AfxEnableControlContainer(); // 创建 shell 管理器,以防对话框包含 // 任何 shell 树视图控件或 shell 列表视图控件。 CShellManager *pShellManager = new CShellManager; // 标准初始化 // 如果未使用这些功能并希望减小 // 最终可执行文件的大小,则应移除下列 // 不需要的特定初始化例程 // 更改用于存储设置的注册表项 // TODO: 应适当修改该字符串, // 例如修改为公司或组织名 SetRegistryKey(_T("应用程序向导生成的本地应用程序")); CChatDlg dlg; m_pMainWnd = &dlg; INT_PTR nResponse = dlg.DoModal(); if (nResponse == IDOK) { // TODO: 在此放置处理何时用 // “确定”来关闭对话框的代码 } else if (nResponse == IDCANCEL) { // TODO: 在此放置处理何时用 // “取消”来关闭对话框的代码 } // 删除上面创建的 shell 管理器。 if (pShellManager != NULL) { delete pShellManager; } // 由于对话框已关闭,所以将返回 FALSE 以便退出应用程序, // 而不是启动应用程序的消息泵。 return FALSE; }

2013-04-14

空空如也

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

TA关注的人

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