自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(0)
  • 资源 (19)
  • 收藏
  • 关注

空空如也

Linux输入子系统流程结构图

Linux输入子系统的流程结构图,给你一个对于Linux下的输入子系统一个清晰地认识。

2010-04-25

Linux学习路线图

Linux学习路线图,给那些在Linux世界中比较迷茫的童鞋给一个指引吧。

2010-04-25

VC实现的各种打印机程序

用VC实现的各种打印程序,可以处理各种类型的打印机,有效地屏蔽掉了底层的差异,提高了编程的高效性,也可进行二次开发。

2009-10-27

VC+SQL server

目前基于客户端/服务器模式的网络考试已经很流行了。作为计算机专业的你肯定参加过各种各样的机考。本文利用各种技术实现这种考试功能。它可以作为你毕业论文,课程设计等的参考资料。感谢VC爱好者网站提供此文章。 一、服务器程序 采用了WinSocket32的完成端口模型(I/O completion ports) WIN32多线程技术 ODBC APIS 进行数据库操作 二、客户端程序 用Win32 API函数构造主窗体和界面元素,如图一所示: 图一 程序组织结构 服务器程序详解 一、完全端口模型(I/O completion ports)是迄今为止最为复杂的一种I/O模型,假如一个程序需要管理为数众多的套接字,那么采用这种模型往往可以达到最佳的系统性能,不幸的是该模型只适用与WIN2000和WINNT操作系统,因其设计的复杂性,只有在你的应用程序需要同时管理数百乃至上千个套接字的时候,而且希望随着系统内安装的CPU的数量增多,应用程序的性能也可以线性的提升,才考虑采用“完成端口模型”(WEB服务器便是这方面的典型例子)。I/O completion ports是唯一适用于高负载服务器的一个技术,它利用一些线程帮助平衡“I/O请求”所引起的负载,这样的构架特别适合应用在SMP系统中产生所谓的“Scalable”服务器,(Scalable是指能够籍着增加RAM或磁盘空间,CPU个数而提升应用程序效能的一种系统)。 二、完全端口模型的具体实现   为了使用“完成端口模型”,我产生了一堆线程在端口上等待,线程数量=CPU个数x2+2,我将每个客户端产生的文件句柄与I/O completion ports端口相关联,建立了这种关系之后,任何客户端发出操作请求,便会导致I/O completion packet被送到“完成端口”去,这个步骤是操作系统完成的,为了回应I/O completion packet,我让I/O completion释放一个等待中的线程,如果目前没有线程正在等待,它不会为这个客户端N产生新的线程, 当作用中的线程处理完相应客户端的“overlapped I/O”后,将返回I/O completion端口进行等待,客户端N这时才能够被处理,这样就保证了我的Workers线程总是保持一个稳定的数量(CPU个数x2+2)。如图二所示: 图二 完全端口线程模型示意图 三、数据库的操作实现   这部分功能主要是通过WinSocket32 API和ODBC API结合使用来实现的,服务端进入监听状态后,为每个客户端提供相应线程处理发过来的指令,通过分析指令,作出以下相应的操作: 客户端发送的指令(自定义的): login: 登陆校验 参数:用户名,科目,密码 Srecv:ScanTm: 检查服务器时间校对试卷修改试卷状态,抛出计数值 Srecv:GetSta: 获取试卷状态 Srecv:GetRlt: 获取上次做答 Srecv:GetNum: 获得试卷相关信息(总题数,开考时间,结束时间) Srecv:GetQue: 获取试卷题目内容. Srecv:SaveDt: 保存试卷 Srecv:ChanST: 修改试卷状态. 四、服务器程序总结   数据库被单独存放在一个服务器中可以保证数据安全性,程序会将客户端的一切操作显示在窗口中,用户可以通过观察窗口,知道所有客户端的动作。这个程序采用“完成端口”模型,可以满足大规模的考试需求。 客户端程序详解 一、窗口完全采用Win32API函数生成 主要包含一下标准控件: static控件 Edit控件 Button控件 Scroll控件 窗口元素全部采用计算后的相对坐标定位,所以800X600和1024X768下均能正常显示, 二、试卷的初始化   考虑到每张试卷的题目数量都不同,为了节约内存空间,所以我在堆中动态生成了一个试卷结构体,通过向服务器程序发送GetNum:指令来获得试卷总题数QuestionNum,然后使用TestPaper=new TestRubric [QuestionNum] /*结构体定义*/ //试卷每道题的结构 struct Questions{ BOOL state; char Text [512]; }; struct SelectObject{ BOOL state; char Text[256]; }; struct TestRubric{ struct Questions Tile; struct SelectObject choose [4]; }; 由于TextOut函数不支持自动换行,所以换行操作必须由我自己完成.因此我用同样的方法在堆中创建了一个Screen用作屏幕显示的结构体 Screen=new Lines[LINES] struct Lines{ int earmark; //用来存储Button的ID BOOL color1;//置颜色标志 BOOL color2;//置颜色标志 char Line [512]; }; LINES=扫描TestPaper中超过屏幕宽度的行数+ QuestionNum*5+QuestionNum*3 屏幕宽度=客户区的宽/每个文字的宽度/2*2 屏幕高度=客户区的高/每个文字的高度 为每一体产生4个互斥的按钮 按钮总数= QuestionNum*4 在堆中生成hWndList数组保存按钮handle hWndList=new hWnd [QuestionNum*4] 按钮ID=题号*10+选项号 Screen.earmark=按钮ID 图三   将TestPaper中的内容经过换行处理之后Copy到Screen结构中,并设置好Screen.earmark,Screen.Color1, Screen.Color2。在主窗口消息循环的WM_PAINT消息中将Screen.Line显示在窗口中: TextOut(hdc,x,cyhar*i,Screen.Line,strlen(Screen.Line)); 并检查Screen.earmark中是否为零,不为零就: ShowWindow(hWndList[Sreen.earmark/10-1] [Screen.earmark%10-1],1); Screen.Color1, Screen.Color2是否为1,如果为1,则改变颜色显示。 三、换行中存在的问题 行宽=客户区的象素宽/每个文字的宽度/2*2是偶数; 汉字占用双字节,字母和标点符号占用单字节; 一行文字=字母+标点+汉字 (有可能产生奇数宽); 当一行文字产生一个奇数宽,最后一个字符又是汉字的时,就会把这个汉字切成两份,另一半会在下一行中显示,这就造成了乱码;   我的解决办法是在换行时增加一个变量HanChar=0,当扫描到字母或是标点时,就HanChar++。一行文字扫描完后需要另起一行时,判断HanChar的奇偶性,当为奇数时行宽往里缩进一个字节,以避免以上情况。 四、客户端程序总结   由于客户端界面采用大量计算,显示的内容不会是固定的模式,他会根据题目的长短变化作出相应调整,以达到最好的显示效果。   当用户登陆验证成功之后,服务器会抛一个时间计数,客户端通过一个定时器,每隔1秒钟将计数减1,并显示倒计时在界面上,直到计数为0,表明考试结束,程序自动保存数据退出。这样做的好处是用户更改客户端的时间,不会影响程序的正常计时。   客户端每隔10秒钟自动保存一次数据,以防突然死机之类的情况,死机后再次登陆,程序会自动加载你先前保存的作答。但点击“提交试卷”后就无法登陆了。 对例子程序的说明 随付的程序和源码是我大型作业的作品,运行时先运行服务器程序,再运行服务端程序: 帐号:姚明 密码:1981922 运行之前请先调整数据库的试卷信息表的开考时间和结束时间。还要确保学生试卷成绩表里面“姚明”那一行中试卷状态为1。

2009-10-18

基于Winsock API的VC网络编程实战

随着计算机信息技术的飞速发展,互联网与人类社会的工作、生活越来越紧密相关,它已经成为人类获取、交流信息的重要途径和手段。所以当前对于开发人员来说,网络编程已是必备的技能。本实例详细介绍了如何利用Winsock API编写网络应用程序。

2009-10-14

S3C2410 LCD驱动示例

1. 为了不让大家觉枯燥,让朋友们更好的理解,我以一个实例来叙述 S3C2410 下一个驱动程序的编写(本文的初始化源码以华恒公司提供的 s3c2410fb.c 为基础)及简单的 GUI程序的编写。 2. 拿到一块 LCD,首先要将 LCD的各个控制线与 S3C2410 的 LCD控制信号相接,当然,电源也一定要接入了,否则不亮可别找我。另外需要注意以下几点: 1) 背光:对于大部分的彩色 LCD一定要接背光,我们才能看到屏上的内容; 2) 控制信号:不同的 LCD 厂商对于控制信号有不同的叫法,S3C2410 芯片手册也给出了一个信号的多个名称(图一),这就要看你们硬件工程师的功底了,

2009-10-13

Linux键盘驱动范例

键盘在所有的驱动之中最为简单的一种,但它却包含了驱动的基本框架,对以后继续深入学习其他复杂的驱动大有裨益,以下便为你逐步剖析驱动的开发......

2009-09-09

一个有趣的Linux入门文章

有趣的linux入门文章。 你从来只用过Windows,从来没接触过UNIX,只知道把一个文件拽来拽去,只知道硬盘就是C: D: E:却从来没有研究过分区表,也许会用VC编个程序,很习惯它的集成环境....

2009-09-04

video4linux2 API

Video for Linux Two API Specification Revision 0.24 Michael H Schimek [email protected] Bill Dirks Hans Verkuil Martin Rubli

2009-07-25

Linux系统下的内存映射原理

本文完整阐述了内存映射的机理。对于提供了MMU(存储管理器,辅助操作系统进行内存管理,提供虚实地址转换等硬件支持)的处理器而言,Linux提供了复杂的存储管理系统,使得进程所能访问的内存达到4GB。   进程的4GB内存空间被人为的分为两个部分--用户空间和内核空间。用户空间地址分布从0到3GB(PAGE_OFFSET,在0x86中他等于0xC0000000),3GB到4GB为内核空间......

2009-07-20

产生随机数的C语言程序

产生随机数的从语言程序,精度较高,而且运行速度较快。

2009-07-13

Linux键盘驱动的移植分析及实现

阐述了键盘的工作原理,对Linux下的键盘驱动程序在不同体系结构之间的差异进行了分析,同时提出了Linux键盘驱动从x86体系到ARM体系的移植实现方案。针对在实际应用中用户对键盘的特殊需求提出了相应的实现方法。

2009-07-07

Introduction to Linux Device Drivers

一篇很好的介绍Linux Device Drivers入门的文章。

2009-07-03

Fail Safe Port Allocation for Linux Device Drivers

Writing a device driver is a challenging and an adventurous job.

2009-07-03

基于内核的Linux键盘记录器

本文分成两个部分。第一部分给出了Linux键盘驱动的工作原理,而后给出了键盘记录器的工作细节及其源代码。

2009-07-03

framebuffer数据转换成BMP格式图片的源代码

在Linux操作系统下,将framebuffer中的缓存数据(也就是raw格式的数据)转换成BMP格式的图片

2009-07-03

Linux kernel API

Linux kernel API,This documentation is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

2009-07-02

计算Linux下程序运行时间

计算Linux下程序的运行时间,是一种比较通用的方法来计算的。

2009-07-02

空空如也

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

TA关注的人

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