windows编程
keep_moving_cqu
每天晚上疲劳的睡在床上时才感觉真真切切地过了一天人生最重要的不仅是努力还有方向压力不是有人比你努力而是比你牛叉几倍的人依然比你努力即使看不到未来即使看不到希望也依然相信自己错不了自己选的人生错不了第二天叫醒我的不是闹钟其实还是梦想
展开
-
beginthreadex和CreateThread区别
线程对于初学者还说可能觉得很高深,这可以理解。对于某些有经验的程序员来说,可能觉得又太简单,我觉得如果认为线程很简单的人,都是没有理解线程,线程里面涉及的东西太多,包括内存,初始化,线程同步等。我打算以QA的形式来写这篇文章。 Q:为什么书上说要以_beginthreadex来替代CreateThread?A:好了,一直用API CreateThread来创建线程的同志转载 2013-08-24 15:52:51 · 951 阅读 · 0 评论 -
windows消息机制
一 Windows中有一个系统消息队列,对于每一个正在执行的Windows应用程序,系统为其建立一个“消息队列”,即应用程序队列,用来存放该程序可能创建的各种窗口的消息。应用程序中含有一段称作“消息循环”的代码,用来从消息队列中检索这些消息并把它们分发到相应的窗口函数中。二 Windows为当前执行的每个Windows程序维护一个「消息队列」。在发生输入事件之后,Windows将事转载 2013-09-11 17:20:17 · 813 阅读 · 0 评论 -
Windows socket-重叠模型
Windows socket-重叠模型重叠I/O一. 重叠模型的优点1. 可以运行在支持Winsock2的所有Windows平台 ,而不像完成端口只是支持NT系统。2. 比起阻塞、select、WSAAsyncSelect以及WSAEventSelect等模型,重叠I/O(Overlapped I/O)模型使应用程序能达到更佳的系统性能。转载 2013-09-10 22:16:56 · 842 阅读 · 0 评论 -
windows socket----select模型
一般我们的网络编程都是用bind ,listen,accept,send/sendto,recv/recvfrom。在创建套接字的时候,是默认使用阻塞模式的,每当我们调用send/sendto等方法时,套接字都会进入阻塞状态,等到条件满足后才返回。当然为每个连接创建线程是个解决这个问题的好办法。如:比较容易想到的一种服务器模型就是采用一个主线程,负责监听客户端的连接请求,当接收到某个客户端的连接请原创 2013-09-08 23:13:51 · 1276 阅读 · 0 评论 -
WSAAsyncSelect模型
Winsock提供了一个有用的异步I/O模型。利用这个模型,应用程序可在一个套接字上,接收以Windows消息为基础的网络事件通知。具体的做法是在建好一个套接字后,调用WSAAsyncSelect函数。该模型最早出现于Winsock的1.1版本中,用于帮助应用程序开发者面向一些早期的16位Windows平台(如Windows for Workgroups),适应其“落后”的多任务消息环境。应用转载 2013-09-08 22:43:24 · 827 阅读 · 0 评论 -
Socket的阻塞模式和非阻塞模式
阻塞模式 Windows套接字在阻塞和非阻塞两种模式下执行I/O操作。在阻塞模式下,在I/O操作完成前,执行的操作函数一直等候而不会立即返回,该函数所在的线程会阻塞在这里。相反,在非阻塞模式下,套接字函数会立即返回,而不管I/O是否完成,该函数所在的线程会继续运行。在阻塞模式的套接字上,调用任何一个Windows Sockets API都会耗费不确定的等待时间。图所示,在调用recv()转载 2013-09-07 23:36:18 · 1768 阅读 · 0 评论 -
windows下的虚拟内存分配分析
让我们从原始的进程创建开始分析吧。当进程创建后,操作系统给该进程分配4GB的虚拟地址空间,这部分虚拟内存是你的应用程序看的到的区域(注意很大一部分是不能访问的,比如:内核区域,这部分加载了操作系统中的内存管理,线程调度,文件系统和所有的设备驱动程序的代码,他们是所有进程共享的地址空间,但是不能访问)。当分配完了虚拟地址空间后,其实这些地址空间还是空闲的,自由的,你此时还是不能使用这些空间,那怎么才原创 2013-08-25 23:56:33 · 1854 阅读 · 0 评论 -
dll和exe的共享节------多进程共享dll/exe全局变量
我们都知道同一个应用程序的多个实例之间并不会影响各自的变量,虽然他们的地址空间都是被该应用程序的映像内的物理存储器所提交,他们的数据和代码都是指向了该应用程序的映像,但是他们还是不会影响各自的变量,因为采取了copy-on-write机制,当有一个实例去修改共享的那个数据区的时候,那么操作系统会另外分配一个内存块,该内存块就是存放这个实例修改的数据,所以并不会影响其他的应用程序实例。那么可执行原创 2013-08-25 22:45:35 · 3213 阅读 · 0 评论 -
虚拟地址空间分配
在WIN32中,每个应用程序都可“看见”4GB的线性地址空间,其中最开始的4MB和最后的2GB由操作系统保留,剩下不足2GB的空间用于应用程序私有空间。具体分配如下:0xFFFFFFFF-0xC0000000的1GB用于VxD、存储器管理和文件系统; 0xBFFFFFFF-0x80000000的1GB用于共享的WIN32 DLL、存储器映射文件和共享存储区;原创 2013-08-26 00:42:36 · 1626 阅读 · 0 评论 -
recv send 阻塞和非阻塞
int send( SOCKET s, const char FAR *buf, int len, int flags ); 不论是客户还是服务器应用程序都用send函数来向TCP连接的另一端发送数据。客户程序一般用send函数向服务器发送请求,而服务器则通常用send函数来向客户程序发送应答。 该函数的第一个参数指定发送端套接字描述符; 第二个参数指明一个存放应用程序要发送数转载 2013-08-25 12:42:10 · 1012 阅读 · 0 评论 -
windows编程之多线程总结
用于线程互斥的方法有:原子锁,关键区域(CriticalSection)。用于线程同步的方法有:事件(Event),互斥量(Mutex),信号量(Semaphore),定时器(这里我们不谈)。 原子锁:InterlockedIncrement(LONG volatile*Addend);InterlockedDecrement(LONG volatile*Addend)原创 2013-08-25 02:19:20 · 1517 阅读 · 0 评论 -
编译链接之----地址无关代码(PIC)总结
动态链接的进程空间分布:动态链接库的最终装载地址在编译的时候并不能确定,而是在装载时,装载器根据当前进程地址空间的空闲情况,动态的分配一块足够大小的地址空间给动态链接库。这样对地址的引用就可以采用地址重定位的方式来解决了。就向静态库那样在静态链接时通过修改指令进行静态重定位,我们的动态链接很容易也想到用装载重定位来进行动态重定位,这样就不用管它到底是装载到哪个地址啦。因为我们的指令地址和数据相原创 2013-11-10 01:28:22 · 5687 阅读 · 0 评论