2014年4月6日
摘要: 1.Windows 的历史中国人喜欢以史为鉴,而事实也确实是,如果你能知道一件事情的来龙去脉,往往可以更容易地理解事物为什么会表现为当前这样的现状。所以,我的介绍性开场白通常会以一段历史开始。不过,我不会以精确到年月日的那种方式详细讲述,而是选取几个对我们的编程生涯有重要影响的关键点。Windows 是真正的图形化界面操作系统的普及者,无论任何人,争夺什么第一个实现的GUI、第一个商业化的GUI之类的虚名,都替代不了 Windows 的历史功绩,让最普通的用户能够容易地操纵PC。第一个声名大噪的版本是Windows 3.0(也有人认为应该是它的更加健康强壮的弟弟Windows 3.1),从那个 阅读全文
posted @ 2014-04-06 19:56 bitbit 阅读(19208) 评论(3) 推荐(10) 编辑
摘要: 1.使用全局变量(窗体不适用) 实现线程间通信的方法有很多,常用的主要是通过全局变量、自定义消息和事件对象等来实现的。其中又以对全局变量的使用最为简洁。该方法将全局变量作为线程监视的对象,并通过在主线程对此变量值的改变而实现对子线程的控制。 由于这里的全局变量需要在使用它的线程之外对其值进行改变,这就需要通过volatile关键字对此变量进行说明。使用全局变量进行线程通信的方法非常简单,通过下面给出的示例代码能够对其有一个基本的认识。 // 线程通信用全局变量 volatile bool g_bDo = false; …… //线程处理函数 UINT ThreadProc5(LPVOID pP 阅读全文
posted @ 2014-04-06 19:30 bitbit 阅读(2180) 评论(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 阅读(4306) 评论(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 阅读(17536) 评论(0) 推荐(0) 编辑
摘要: 创建线程好几个函数可以使用,可是它们有什么区别,适用于什么情况呢?参考了一些资料,写得都挺好的,这里做一些摘抄和整合。【参考1】CreateThread, AfxBeginThread,_beginthread, _beginthreadex的区别=====================================================================1、CreateThread——Windows的API函数2、_beginthreadex——MS对C Runtime库的扩展SDK函数3、AfxBeginThread——MFC中线程创建的MFC函数CreateT 阅读全文
posted @ 2014-04-06 10:09 bitbit 阅读(420) 评论(0) 推荐(0) 编辑
摘要: (1)Windows坐标系统Windows坐标系分为逻辑坐标系和设备坐标系两种,GDI支持这两种坐标系。一般而言,GDI的文本和图形输出函数使用逻辑坐标,而在客户区移动或按下鼠标的鼠标位置是采用设备坐标。逻辑坐标系(Logical Coordinate)是面向DC的坐标系,这种坐标不考虑具体的设备类型,在绘图时,Windows会根据当前设置的映射模式将逻辑坐标转换为设备坐标。 设备坐标(Device Coordinate)又称为物理坐标(Physical Coordinate),是指输出设备上的坐标。通常将屏幕上的设备坐标称为屏幕坐标。设备坐标用对象距离窗口左上角的水平距离和垂直距离来指定对象 阅读全文
posted @ 2014-04-06 09:49 bitbit 阅读(891) 评论(0) 推荐(0) 编辑
摘要: 2013-02-05 14:18 48人阅读 评论(0) 收藏 举报关键字:Unicode,CharacterSet,字符集,UTF-8,ANSI,ASCII,UTF-7原文标题:TheAbsoluteMinimumEverySoftwareDeveloperAbsolutely,PositivelyMustKnowAboutUnicodeandCharacterSets(NoExcuses!)原文链接:http://www.joelonsoftware.com/printerFriendly/articles/Unicode.html作者:JoelSpolsky来源:http://blog. 阅读全文
posted @ 2014-04-06 09:46 bitbit 阅读(1802) 评论(0) 推荐(0) 编辑
摘要: MVC设计模式即MVC框架。MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑和数据显式分离的方法组织代码,将业务逻辑被聚集到一个部件里面,在界面和用户围绕数据的交互能被改进和个性化定制的同时而不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。外文名MVC框架全名Model View Controller产生时间1982年架构内容视图,模型,控制器类别软件构件模式目录1简介2MVC 编程模式3框架内容▪ 视图▪ 模 阅读全文
posted @ 2014-04-06 09:35 bitbit 阅读(11732) 评论(0) 推荐(0) 编辑
摘要: 对于任何一个软件开发人员来说,架构师都是一个令人向往的角色。就连世界首富比尔盖茨在2000年卸任公司CEO的同时,也担任了微软公司的荣誉角色“首席软件架构师”,可见“架构师”这一称谓的吸引力。架构师是公司的“金领”,有着非常高的收入,很少需要考虑生存的问题,从而有更多的精力思考关键技术问题,形成“强者愈强”的良性循环。部分优秀的开发人员在工作了一定时间后,就要开始考虑自己的未来到底向哪个方向发展。如果开发人员的沟通能力强过技术能力,在补充一定的项目管理知识后,可以向技术管理的方向转型。如果其对技术一直很感兴趣,而沟通能力也不弱,则可以试着进一步加强技术修养,以期向架构师的方向发展,最终“修成正 阅读全文
posted @ 2014-04-06 09:21 bitbit 阅读(465) 评论(0) 推荐(0) 编辑