Windows程序设计
劉俊
这个作者很懒,什么都没留下…
展开
-
写一下这些年看过的书(2014.7.31更新)
之前答应了啊牛要写一篇东西分享一下经验,但是却一直都没怎么动手。因为自己大学四年基本上都是摸着石头过河的感觉,也谈不上什么经验,所以也不知道自己可以写些什么。不过,后来受一位师兄的日志启发,觉得也可以分享一下自己看过的书,让师弟师妹参考一下,希望能起到一点帮助吧。 PS:水平有限,下面介绍的那些书完全是站着自己角度去写的,所以如有不妥的地方,请大家指正。 1、《C Prime原创 2014-07-06 01:18:57 · 2175 阅读 · 0 评论 -
《深入理解计算机系统 2nd》读书笔记----第7章 链接
链接链接(linking)是将各种代码和数据部分收集起来并组合成为一个单一文件的过程,这个文件可被加载(或被拷贝)到存储并执行。链接可以执行于编译时(compile time),也就是在源代码被翻译成机器代码时;也可以执行于加载时(load time),也就是在程序被加载器(loader)加载到存储器并执行时;甚至执行于运行时(run time),由应用程序来执行。静态链接Un原创 2013-03-15 00:58:39 · 3125 阅读 · 4 评论 -
《Windows核心编程 5th》读书笔记----第9章 用内核对象进行线程同步
用户模式与内核模式下的线程同步首先,先引用一下《深入理解计算机系统 2nd》第8章 “异常控制流”关于用户模式和内核模式的一段话,理清一下关于用户模式和内核模式的概念:为了使操作系统内核提供一个无懈可击的进程抽象,处理器必须提供一种机制,限制一个应用可以执行的指令以及它可以访问的地址空间范围。处理器通常是用某一个控制寄存器中的一个模式位(mode bit)来提供这个功能的,该寄存器描述原创 2013-03-16 10:49:20 · 963 阅读 · 0 评论 -
《Windows核心编程 5th》读书笔记---第8章 用户模式下的线程同步
在以下两种基本情况下,线程之间需要相互通信:1、需要让多个线程同时访问一个共享资源,同时不能破坏资源的完整性。(互斥)2、一个线程需要通过通知其他线程某种任务已经完成。(同步)用户模式下的线程同步Interlocked系列函数Interlocked系列函数会以原子方式来操纵一个值,所谓的原子访问,指的是一个线程在访问某个资源的同时能够保证没有其他线程会同一时刻访原创 2013-03-14 21:21:35 · 820 阅读 · 0 评论 -
《Windows核心编程 5th》读书笔记------第3章 内核对象
何为内核对象?每个内核对象都只是一个内存块,它由操作系统内核分配,并只能由操作系统内核访问。这个内存块是一个数据结构,其成员维护着与对象相关的信息。由于内核对象的数据结构只能由操作系统内核访问,所以应用程序不能在内在中定位这些数据结构并直接更改其内容。应用程序想要操纵这些内核对象,可以利用Windows提供的一组函数。调用一个会创建内核对象的函数后,函数会返回一个句柄(handle),它标原创 2013-03-13 00:01:11 · 761 阅读 · 0 评论 -
Windows内核对象句柄的继承小总结
对象句柄的继承 跨进程边界共享内核对象有三种常用的机制:为对象命名、复制对象句柄,还有就是使用对象句柄继承。 Windows支持“对象句柄的继承”,而不是支持对象的继承。(这里顺带总结一下,内核对象本质上是一个内存块,是操作系统内核分配,并只能由操作系统内核访问。而句柄标识了所创建的内核对象,与进程相关。句柄的值大概可以认为是进程句柄表的一个索引值,标识内核对象在进程句柄表中的原创 2012-07-23 22:20:25 · 4721 阅读 · 1 评论 -
《Window核心编程 5th》读书笔记----进程、作业、线程
进程一般将进程定义成一个正在运行的程序的一个实例,它由以下两部分构成(在Windows中)。1、一个内核对象,操作系统用它来管理进程。内核对象也是系统保存进程统计信息的地方。2、一个地址空间,其中包含所有可执行文件或DLL模块的代码和数据。-----------------------------------作业Windows提供了一个作业内核对象,它允许我们将进程原创 2013-03-13 00:32:16 · 912 阅读 · 0 评论 -
摘录-德问每周精选编程问答
前一阵子,在微博发现了一个叫做“德问”的编程问答网站,里面有不少有意思、值得思考的问题,也有让人叹为观止的解答。所以,自己想弄个博客长期记录,自己所关注领域的问题与解答。 下面的内容转自“德问:编程社交问答” 非精选,自己觉得有意思的: 1、deque的插入和删除操作会使迭代器失效么? 2、MinGw中GCC与G++的异同?3、Windows中,互斥转载 2012-11-29 00:53:42 · 958 阅读 · 0 评论 -
关于串口通信
昨天,应舍友请求帮它写一个简单的上位机软件。功能非常简单,就是拖几个按钮控件,然后添加相应功能,传送两个字节的数据即可(用来控制小车速度,以及小车运转方向 ),界面如图。 此前也帮他写过另外一个上位机软件,也是非常简单,就是接收相应数据并显示,并传送特定的控制信息,控制单片机。因为自己对硬件方面一窍不通,完全不懂,所以唯有百度。然后找到VC在这串口通信这方面,一般有三种方式原创 2012-10-11 23:17:41 · 1356 阅读 · 0 评论 -
用Win32 SDK & C++实现的一个简易版局域网聊天软件
效果图: 程序简要说明:程序名称:简易局域网聊天工具 开发方式:Win32 SDK 、C++开发环境:Visual C++ 6.0功能: 支持一对一聊天、传送、接收文件,支持群聊,实时好友列表,简陋的消息提示。缺点:用户界面不友好,排错功能较差,一个IP地址只能对应一个程序实例。 程序框架的来源:在局域网实现一个聊天工具,主要需要解决的是原创 2012-09-06 00:26:43 · 4564 阅读 · 4 评论 -
当一个窗口关闭时WM_CLOSE,WM_DESTROY,WM_QUIT
一般是响应WM_CLOSE,调用DestroyWindow()DestroyWindow()又发送WM_DESTROY响应WM_DESTROY,调用WM_QUITGetMessage()发现WM_QUIT,退出程序 有三个消息看起来差不多,都是处理关闭的事情的,它们是WM_CLOSE,WM_DESTROY,和WM_QUIT。它们的确很相似,但你需要知道它们之间的不同!一个窗口或转载 2012-08-22 11:02:41 · 1936 阅读 · 0 评论 -
VC++文件操作函数解析
ftell:功 能:返回当前文件位置,也就是说返回FILE指针当前位置。 函数原型: long ftell(FILE *stream); 函数功能:函数 ftell() 用于得到文件位置指针当前位置相对于文件首的偏移字节数。在随机方式存取文件时,由于文件位置频繁的前后移动,程序不容易确定文件的当前位置。使用fseek函数转载 2012-08-29 16:50:08 · 3288 阅读 · 0 评论 -
VC C/C++ 4种方法获取文件大小 Windows API
#include #include #include #include using namespace std;void main(){ char *filepath = "C:\\1.txt"; //方法一 HANDLE handle = CreateFile(filepath, FILE_READ_EA, FILE_SHARE_转载 2012-08-29 16:28:29 · 20753 阅读 · 0 评论 -
《深入理解计算机系统 2nd》部分读书笔记---第9章 虚拟存储器(未完成)
进程--摘自《深入理解计算机系统 2nd》第8章 异常控制流进程提供给应用程序的关键抽象:一个独立的逻辑控制流,它提供一个假象,好像我们的程序独占地使用处理器。一个私有的地址空间,它提供一个假象,好像我们的程序独占地使用存储器系统。这两个抽象很重要,对理解《Windows核心编程 5th》和《Unix环境高级编程 2nd》两书中描述的一些机制很有帮助。虚原创 2013-03-17 15:48:13 · 3343 阅读 · 2 评论 -
《Windows核心编程 5th》部分读书笔记----第10章 同步设备I/O与异步设备I/O
异步设备I/O基础假设一个线程向设备发出一个异步I/O请求。这个请求被传给设备驱动程序,后者负责完成实际I/O的操作。当驱动程序在等待设备响应的时候,应用程序的线程并没有因为要等待I/O请求完成而被挂起,线程会继续运行并执行其他有用的任务。到了某一时刻,设备驱动程序完成了对队列中的I/O请求的处理,这时它必须通知应用程序数据已发送,数据已收到,或发生了错误,这些通知称之为“接收I/O请求完成通原创 2013-03-23 15:12:14 · 1138 阅读 · 0 评论 -
Windows进程间各种通信方式浅谈
1 Windows进程间通信的各种方法进程是装入内存并准备执行的程序,每个进程都有私有的虚拟地址空间,由代码、数据以及它可利用的系统资源(如文件、管道等)组成。多进程/多线程是Windows操作系统的一个基本特征。Microsoft Win32应用编程接口(Application Programming Interface, API)提供了大量支持应用程序间数据共享和交换的机制,这些机制行转载 2013-10-04 20:01:56 · 1691 阅读 · 0 评论 -
[综合面试] 牛人整理分享的面试知识:操作系统、计算机网络、设计模式、Linux编程,数据结构总结
基础篇:操作系统、计算机网络、设计模式一:操作系统1. 进程的有哪几种状态,状态转换图,及导致转换的事件。2. 进程与线程的区别。3. 进程通信的几种方式。4. 线程同步几种方式。(一定要会写生产者、消费者问题,完全消化理解)5. 线程的实现方式. (也就是用户线程与内核线程的区别)6. 用户态和核心态的区别。7. 用户栈和内核栈的区转载 2013-10-04 00:32:45 · 2034 阅读 · 0 评论 -
程序员技术练级攻略
文章来自 coolshell.cn,11年的文章,如今依然非常受用。月光博客6月12日发表了《写给新手程序员的一封信》,翻译自《An open letter to those who want to start programming》,我的朋友(他在本站的id是Mailper)告诉我,他希望在酷壳上看到一篇更具操作性的文章。因为他也是喜欢编程和技术的家伙,于是,我让他把他的一些学转载 2013-07-04 00:35:33 · 1221 阅读 · 0 评论 -
错误合集(2013-3-11更新)
今天将书上的一个实例程序实现的时候,发现问题多多。首先是书上的代码本来就有BUG,而且书上作者是抄袭中的渣渣,连抄袭也没有抄完全,再加上自己能力上的问题,在查错、发现问题、调试上花了很多时间。最令人蛋痛的是,有很多错误其实是已经错过很多次了,又或者根本不是什么技术性错误。为了更好地节省自己的时间,自己每犯一次错误就在这里记一次,总结一次,就算再忙也要。这里的错误都将以小标题的格式分开,原创 2012-02-21 19:54:37 · 2096 阅读 · 6 评论 -
WinSock五种I/O模型的性能分析
原文链接:http://www.rover12421.com/2010/04/02/winsock%E4%BA%94%E7%A7%8Dio%E6%A8%A1%E5%9E%8B%E7%9A%84%E6%80%A7%E8%83%BD%E5%88%86%E6%9E%90.html重叠I/O模型的另外几个优点在于,微软针对重叠I/O模型提供了一些特有的扩展函数。当使用重叠I/O转载 2013-05-10 17:15:16 · 840 阅读 · 0 评论 -
关于《Windows核心编程 5th》“3.3.4终端服务命名空间”章节的理解
很久之前看到这一小节的时候,基本是一头雾水、半知半解的感觉,因为有太多不熟悉的概念。当时也在网上找了一些资料和博客来看,感觉帮助也不大,于是就跳过了。今天论坛的左懒童鞋突然问了我这个地方应该如何理解,于是决定再好好去看看书,验证自己的想法。书上主要原话:在正在运行终端服务的计算机中,有多个用于内核对象的命名空间。其中一个是全局命名空间,所有客户端都能访问的内核对象要放在这个命名空间原创 2013-05-10 00:34:15 · 1515 阅读 · 2 评论 -
《Windows网络与通信程序设计》读书笔记----可伸缩服务器系统设计实例
一个基于IOCP服务器的设计――CIOCPServer类 CIOCPServer类的总体结构:CIOCPServer类工作主要由一个监听线程_ListenThreadProc和一个或多个工作线程_WorkerThreadProc负责。 监听线程_ListenThreadProc的工作:监听线程负责初始投递几个异步的AcceptEx I/O,创建指定数目的工作线程,另外还负责原创 2013-05-08 00:00:16 · 1383 阅读 · 0 评论 -
《Windows网络与通信程序设计》读书笔记----IOCP与可伸缩网络程序
完成端口I/O模型I/O完成端口是应用程序使用线程池处理I/O请求的一种机制。处理多个并发异步I/O请求时,使用I/O完成端口比在I/O请求时创建线程更快更有效。 CreateIoCompletionPort函数有点复杂,需要说明一下CreateIoCompletionPort函数有两个功能。1、创建一个完成端口对象。2、将一个或者多个文件句柄(套接字句柄)关联到I/O完成原创 2013-05-06 15:34:52 · 1500 阅读 · 0 评论 -
《Windows网络与通信程序设计》读书笔记----重叠(Overlapped)I/O模型
重叠(Overlapped) I/O模型与介绍过的其他模型相比,重叠I/O模型提供了更好的系统性能。这个模型的基本设计思想是允许应用程序使用重叠数据结构一次投递一个或者多个异步I/O请求(即所谓的重叠I/O)。提交的I/O请求完成之后,与之关联的重叠数据中事件对象触发,应用程序便可使用WSAGetOverlappedResult函数获取重叠操作的结果。这和使用重叠结构调用ReadFile和Wr原创 2013-05-05 16:19:02 · 1243 阅读 · 0 评论 -
《Windows网络与通信程序设计》读书笔记----WSAEventSelect模型
WSAEventSelect模型Winsock提供另一种有用的异步事件通知I/O模型――WSAEventSelect模型。这个模型与WSAAsyncSelect模型类似,允许应用程序在一个或者多个套接字上接收基于事件网络通知。它与WSAAsyncSelect模型类似是因为它也接收FD_XXX类型的网络事件,不过并不是依靠Windows的消息驱动机制,而是经由事件对象句柄通知。使用这个模型的原创 2013-05-05 10:41:38 · 1216 阅读 · 0 评论 -
《Windows网络与通信程序设计》读书笔记-----WSAAsyncSelect模型
WSAAsyncSelect模型WSAAsyncSelect模型允许应用程序以Windows消息的接收网络事件通知。这个模型是为了适应Windows的消息驱动环境而设置的,现在许多对性能要求不高的网络应用程序都采用WSAAsyncSelect模型,MFC中的CSocket类也使用了它。 WSAAsyncSelect函数自动把套接字设为非阻塞模式,并且为套接字绑定一个窗口句柄和发送哪些通原创 2013-05-04 16:02:11 · 1068 阅读 · 1 评论 -
《Windows网络与通信程序设计》读书笔试----select模型
select模型具体编程流程:1、 初始化套接字集合fdSocket,向这个集合添加监听套接字。2、 将fdSocket集合拷贝到一个每一次临时要读取的fdRead集合,然后将fdRead传递给select函数。当有事件发生 时,select函数移除集合中没有未决I/O操作的套接字句柄,然后返回。3、 比较原来fdSo原创 2013-05-04 15:33:57 · 869 阅读 · 0 评论 -
Windows下的线程终止
Windows下的线程可以通过以下4种方法来终止。1、 线程函数返回。(强烈推荐)2、 线程通过调用ExitThread函数“杀死”自己。(避免使用)3、 同一个进程或另一个进程中的线程调用TerminateThread函数(避免使用)4、 包含线程的进程终止运行(避免使用) 1)、线程函数返回(自然死亡)清理工作包括:C原创 2012-07-28 01:28:22 · 4272 阅读 · 0 评论 -
CreateThread和_beginthreadex
在《Windows核心编程 5th》一书里经常提到一个的建议,那就是:如果写的是C/C++代码,尽量不要用CreateThread来创建线程,而必须调用C/C++运行库函数_beginthreadex。其中的原因摘自书上的原话就是:”标准C/C++运行库不是为多线程应用程序而设计的。”。以全局函数和全局变量为例,在多线程环境中会问题。因为他们是多个线程访问同一个资源,例如调用函数出错后设置err原创 2012-07-28 01:24:45 · 1069 阅读 · 0 评论 -
11-Batch
/******************************************************************************Module: Batch.cppNotices: Copyright (c) 2008 Jeffrey Richter & Christophe Nasarre*********************************转载 2011-11-17 00:14:52 · 608 阅读 · 0 评论 -
10-FileCopy
/******************************************************************************Module: FileCopy.cppNotices: Copyright (c) 2008 Jeffrey Richter & Christophe Nasarre******************************转载 2011-11-17 00:13:47 · 1214 阅读 · 0 评论 -
09-Handshake
/******************************************************************************Module: Handshake.cppNotices: Copyright (c) 2000 Jeffrey Richter**************************************************转载 2011-11-17 00:10:26 · 739 阅读 · 0 评论 -
09-BadLock
/******************************************************************************Module: BadLock.cppNotices: Copyright (c) 2008 Jeffrey Richter & Christophe Nasarre*******************************转载 2011-11-17 00:09:13 · 603 阅读 · 0 评论 -
08-Queue
/******************************************************************************Module: Queue.cppNotices: Copyright (c) 2008 Jeffrey Richter & Christophe Nasarre*********************************转载 2011-11-17 00:06:48 · 935 阅读 · 0 评论 -
windowsx.h头文件使用说明
windowsx.h头文件:(全部都是网上查的)http://www.codeproject.com/win32/msgcrackwizard.asp 第一部分:介绍:WINDOWSX.H 头文件为W32SDK的程序员提供方便(工具?)很多初中级程序员用C/C转载 2011-08-22 17:52:34 · 9303 阅读 · 0 评论 -
可等待的计时器与APC调用
以前第一次看到APC,也就是异步过程调用的时候,没有搞明白这是一个什么样的机制。今天再看一次,然后结合一些简单的测试代码和搜索来的资料,大概明白了是怎么回事。 先来非常简单地描述一下这一个“可等待的计时内核对象”。大概定义如下:可等待的计时器对象是这样一种内核对象,它们会在某个指定的时间触发,或每一段时间触发一次,它们通常用来在某个时间执行一些操作。 相关的API(具体原创 2012-08-02 19:20:04 · 1650 阅读 · 1 评论 -
两个测试程序
本来是想测试一下在多线程环境下printf多次输出的情况,验证一下自己的想法,结果自己的测试程序貌似有问题,测试不出来.....先记下如何创建线程,减少烦人的编译错误先 /* ----------------------------------------------------------------------------------- 这个是用_beginthreadex创建线程原创 2012-05-30 00:35:20 · 556 阅读 · 0 评论 -
WinSock 重叠I/O模型
//服务端/*。在程序清单7-8 中,我们向大家展示了如何构建一个简单的服务器应用,令其采用前述的方法,通过完成例程,来实现对一个套接字请求的管理。该程序的编码主要按下述步骤进行:① 新建一个套接字,开始在指定端口上,监听一个进入的连接。② 接受一个进入的连接请求。③ 为接受的套接字创建一个WSAOVERLAPPED 结构。④ 在套接字上投递一个异步转载 2012-02-03 17:43:46 · 1240 阅读 · 0 评论 -
关于_WIN32_WINNT的含义
在使用一些新版本的API,或者控件的新特性(比如新版的ComCtl32.dll)的时候,你可能会得到“error C2065: undeclared identifier.“这个错误。原因是这些功能是依赖于你的操作系统的版本的。而你的头文件中的定义并不是最新的。(对于MFC,就是stdafx.h)下面详细列举了每个Windows版本对应的NTDDI_VERSION,_WIN32_WINNT,WIN转载 2012-01-10 10:48:42 · 19181 阅读 · 0 评论 -
11-TimedMsgBox
/******************************************************************************Module: TimedMsgBox.cppNotices: Copyright (c) 2000 Jeffrey Richter************************************************转载 2011-11-17 00:16:00 · 879 阅读 · 0 评论