上一页 1 ··· 92 93 94 95 96 97 98 99 100 ··· 103 下一页
摘要: [作者] 猪头三 个人网站 :http://www.x86asm.com/ [序言] 很多人都对驱动开发有兴趣,但往往找不到正确的学习方式.当然这跟驱动开发的本土化资料少有关系.大多学的驱动开发资料都以英文为主,这样让很多驱动初学者很头疼.本人从事驱动开发时间不长也不短,大概也就3~4年时间.大多数人都认为会驱动开发的都是牛人,高手之类的.其实高手,牛人不是这样定义的.我们在学习驱动开发之前,一定要明白一个道理:术业有专攻,不要盲目跟风. [贡献者] 1> defddr 看雪学院 2> StudyRush 看雪学院 [本内容适用环境及工具] 1> Windows系统下 ... 阅读全文
posted @ 2012-10-18 19:43 xingoo 阅读(3851) 评论(1) 推荐(0)
摘要: Start函数用于开启服务1 初始化状态变量2 创建监听套接字3 加载使用扩展API函数4 创建完成端口对象5 建立监听套接字和完成端口对象间的关联6 为监听套接字注册FD_ACCEPT时间7 投递AcceptEx IO不够时可以得到通知后创建监听线程BOOL CIOCOPServer::Start(int nPort,int nMaxConnnections,int nMaxFreeBuffers,int nMaxFreeContexts,int nInitialReads){ //检查服务是否启动 if(m_bServerStarted) return FALSE... 阅读全文
posted @ 2012-10-18 16:59 xingoo 阅读(1414) 评论(0) 推荐(0)
摘要: 1 客户连接列表 m_pConnectionList指向客户连接列表,描述所有连接的CIOCPContext对象组成的表AddAConnnection函数向列表中加入一个CIOCPContext对象。如果到达最大数量返回FALSECloseAConnnection函数关闭指定的客户连接CloseAllConnection函数遍历整个连接列表,关闭所有的客户套接字 2 抛出接收请求的列表 所有未决的accept请求都在m_pPen... 阅读全文
posted @ 2012-10-18 16:04 xingoo 阅读(677) 评论(0) 推荐(0)
摘要: 为了避免频繁的申请释放内存,使用内存池来管理缓冲区对象和客户上下文对象使用的内存。使用指针保存所有空闲的内存块,形成空闲列表。申请内存时,这个指针不为NULL,就从空闲列表中取出一个来使用,如果取完,就真正的申请内存。 1 缓冲区对象 程序使用CIOCPBuffer来描述per-IO数据,包含IO操作的必要信息,提交时,提交的就是CIOCPBuffer对象下面是申请缓冲区对象代码:CIOCPBuffer *CIOCPServer::AllocateBuffer(int nLen){ CIOCPBuffer *pBuffer = NULL; if(nLen... 阅读全文
posted @ 2012-10-18 14:44 xingoo 阅读(1376) 评论(0) 推荐(0)
摘要: CIOCPServer类有多个IO工作线程在完成端口上处理异步IO调用。当特定的网络事件发生时,这些线程调用CIOCPServer类的虚函数,添加自己想要的代码。CIOCPServer执行的步骤:1 创建监听线程2 创建IO工作线程3 服务启动期间,监听线程一直运行,为IO工作线程提供服务 阅读全文
posted @ 2012-10-18 14:19 xingoo 阅读(953) 评论(0) 推荐(0)
摘要: 问题描述: 给定n种物品和一背包,物品i的重量是wi,其价值为vi,背包的容量为C。问应如何选择装入背包的物品(物品不能分割),使得装入背包中物品的总价值最大?抽象描述: x[n]:表示物品的选择,x[i]=1表示选择放进物品i到背包中。问题分析: 1.抽象之后背包问题转换为找到一个最优的数组,x1,x2,.....,xn的0-1序列。 2.假设最优解的序列为x1,x2,.....,xn,能使背包容量C的总价值最大. 如果,x1=1,则x2,...,xn是C-w1容量的背包的总价值依然是最大的序列; 如果,x1=0,则x2,....,xn是C容量的背包的总价值依然是最大的序列。这就... 阅读全文
posted @ 2012-10-18 12:44 xingoo 阅读(1320) 评论(0) 推荐(2)
摘要: windows socket2定义了一种扩展机制,允许windows套接字服务提供者想应用程序设计者导出 先进的数据传输功能1 GetAcceptExSockaddrs函数粘贴从AcceptEx函数取得的数据,将本地和远程地址传递到sockaddr结构2 TransmitFile函数在一个已连接的套接字句柄上传输文件数据3 TransmitPackets函数与TransmitFile类似,不同之处是,既可以发送文件,也可以发送内存缓冲区中的数据4 ConnextEx函数为指定的套件诶子建立连接,连接建立后,也可以发送数据,仅支持面向连接的套接字5 DisconnectEx函数关闭套接字上的连接 阅读全文
posted @ 2012-10-17 21:24 xingoo 阅读(290) 评论(0) 推荐(0)
摘要: 主线程创建监听套接字,创建额外工作线程,关联IOCP,负责等待和接受到来的连接。调用GetQueuedCompletionStatus函数,函数返回:1 调用失败2 套接字被对方关闭3 请求成功完成程序首先定义per-handle per-IO的操作数据的结构类型#define BUFFER_SIZE 1024typedef struct _PER_HANDLE_DATA{ SOCKET s; sockaddr_in addr;}PER_HANDLE_DATA,*PPER_HANDLE_DATA;typedef struct _PER_IO_DATA{ OVERLAPPED ... 阅读全文
posted @ 2012-10-17 19:53 xingoo 阅读(1822) 评论(0) 推荐(0)
摘要: IOCP(IO完成端口)是一种伸缩性的IO模型,广泛应用于各种类型的高性能服务器,如Apache等。IO完成端口,应用程序使用线程池处理异步IO请求的一种机制。最初设计: 应用程序发出一些异步IO请求,设备驱动把这些工作项目排序到完成端口,在完成端口上等待线程池便可以处理这些完成IO。完成端口实际上是一个WINDOWS IO结构,可以接收多种对象的句柄。 1 创建完成端口对象 调用CreateIoCompletionPort函数创建一个完成端口对象,winsock使用这个对象为任意数量的套接字句柄管理IO请求HANDLE Creat... 阅读全文
posted @ 2012-10-17 19:42 xingoo 阅读(1009) 评论(0) 推荐(0)
摘要: 流水作业调度问题描述:N个作业{1,2,………,n}要在由两台机器M1和M2组成的流水线上完成加工。每个作业加工的顺序都是先在M1上加工,然后在M2上加工。M1和M2加工作业i所需的时间分别为ai和bi,1≤i≤n。流水作业高度问题要求确定这n个作业的最优加工顺序,使得从第一个作业在机器M1上开始加工,到最后一个作业在机器M2上加工完成所需的时间最少。可以假定任何任务一旦开始加工,就不允许被中断,直到该任务被完成,即非优先调度。输入:输入包含若干个用例,第一行为一个正整数K(1<=K<=1000),表示用例个数,接下来K个用例,每个用例第一个为作业数N(1<=N<=10 阅读全文
posted @ 2012-10-17 18:28 xingoo 阅读(2479) 评论(0) 推荐(0)
上一页 1 ··· 92 93 94 95 96 97 98 99 100 ··· 103 下一页