Skip to content

chenghui-li/EnjoyCoding

Repository files navigation

进程模拟

使用C语言对进程的调度以及运行时的情况进行了简单的模拟,调度算法为优先级调度。

主要技术

  1. 重定向输出到不同的终端
  2. STL中list的遍历,删除,插入
  3. 进程调度中优先级调度算法
  4. 多线程编程
  5. 文件的读写
  6. 线程同步中互斥锁的应用
  7. 随机数种子的选定

思想

维护两个链表plist与pri_list,将指定数目的进程PCB添加到plist中,每个进程随机生成运行时间与初始优先级,在plist中根据优先级从大到小排序,创建一个线程同步的查询遍历该链表,使最大优先级的进程处于运行状态,其余进程处于就绪状态,且记录其等待时间,计算优先级,一旦某进程优先级大于当前运行中的进程的优先级,则发生抢占,如此轮转,直到所有进程运行完毕。期间,进程的初始状态,运行状态等所有信息均会动态打印到不同终端,用户可以在指定终端输入指令,有new 创建进程,sleep 进程挂起,wake 进程唤醒,exit进程撤销几个选项,在进程运行或等待时,可以随时输入指令操作进程,改变其状态。

2D-shortingGame

使用C++和DirectX写的一款类似雷电的射击游戏,主要是运用下单件和原型设计模式(用的比较挫0.0)

主要技术

  1. DirectX库的调用
  2. 单件,原型设计模式的理解与运用
  3. 面向对象编程的思维
  4. list的使用

功能

有两类参与者,玩家控制的飞机和电脑生成的敌机。飞机都可以发射子弹,被彼此子弹击中后都会有血量损耗,当敌机血量为0时,该敌机爆炸,产生新的敌机。玩家血量为0,游戏结束。用户可以使用上下左右键控制飞机的移动。敌机有随机的出现位置,固定的出现顺序,出现顺序越靠后,血量越多,伤害越大,难度越大。击落所有敌机,游戏通关

文件说明

类: emy: 所有敌机的父类,有敌机血量,伤害,坐标,移动速度,存活状态,子弹位置,速度和图片等属性,有获取飞机位置,改变飞机血量,改变飞机存活状态等成员函数。提供对实例对象复制的虚函数clone( ) 。 emyPlane:emy的派生类,用于创建实例对象,对clone虚函数给予实现 Player:玩家的飞机类,有飞机血量,伤害,坐标,移动速度,存活状态,子弹位置,速度和图片等属性,有获取飞机位置,改变飞机血量,改变飞机存活状态,获取子弹位置和状态等成员函数。用于实例化玩家飞机 文件: MyDirectX:游戏编程工具箱,包含了精灵动画绘制,纹理的加载等函数 MyWindows:包含Windows的窗口创建过程和消息处理,是程序运行的基础 Game:程序执行的主体,对飞机移动,子弹移动,碰撞检测,爆炸效果的绘制,背景绘制,实例化各个类以及相关函数调用的执行

tiny web server

根据CSAPP的一个实验改写扩展而成,实现了HTTP协议的GET方法,可以传输静态文件,文本,网页,视频等,也可以与用户交互实现类似电子词典的动态功能

功能

浏览器打开指定ip及端口可以与指定服务器进行通信,服务器可以返回静态的HTML网页,文本内容,视频内容,以及支持一些文件下载到客户端。动态内容即类似电子词典的功能,用户在浏览器指定文本框内输入英文,提交后服务器将查询到的对应的中文以HTML的方式返回给浏览器。

主要技术

  1. HTTP协议工作原理的基本理解
  2. socket编程
  3. 对字符串的提取与处理
  4. UNIX I/O的系统调用
  5. 多进程的并发编程
  6. HTML中表单的提交与处理

设计

在打开浏览器输入URL回车后,发生了一系列事情:域名解析->与指定服务器建立连接->打包请求内容并发送给服务器->服务器解析请求->将需要的内容打包返回给浏览器。如此即是获取一个web页面的大致过程,是典型的客户端服务器模型。本实验主要针对服务器的编写。服务器需要做的工作就是指定监听端口,解析收到的请求,静态请求直接返回,动态内容则由CGI运行后将运行结果返回。 在实现中,输入指定端口,调用socket,bind,listen,accept一系列函数完成基本框架的搭建,在指定端口等待客户端的连接。连接建立后,将请求解析出 GET /request-URI HTTP/version的格式,将/request-URI内容进行静态还是动态的判断,如果字符串内含有cgi-bin,表明是动态内容,否则为静态内容。使用stat函数获取文件信息,静态内容则将文件返回给客户端,动态内容则创建一个子进程,在其上下文中运行对应的CGI程序,将运行结果返回给浏览器。

车管所检测

背景

车辆每年年检的时候都有这样一道工序:一共有三个检测点,每个检测点检测不同的功能,我们称其为一工位,二工位,三工位,每个工位检测耗时不同,一工位耗时2分钟,二工位6分钟,三工位4分钟。三个工位处于一条检测线,汽车可能三个工位都需要检测一遍,也有可能只检测其中的部分工位,也就是说有7种可能。 现在有两条检测线,每条检测线上都有三个工位。要求汽车必须从一工位进入,三工位离开,工位之间不可以停车。 每个车有一个服务号,服务号从1到7,每个服务号代表其需要检测的工位,映射关系如下:

1——1 2 3
2——1
3——1 2
4——2
5——2 3
6——3
7——1 3

现在如果有若干辆汽车来年检,问怎样安排检测顺序使得整体耗时最短。

要求

如果对于一辆汽车来说,两条检测线都可以进入,则选择进入1号线。要求计算出最小花费时间和最大花费时间