资源简介
该工程为多线程实现的电梯运行,可能有些情况没有考虑处理好,欢迎道友留言指正
代码片段和文件信息
#include “stdafx.h“
#include “Elevator.h“
#include “Person.h“
//创建电梯运行线程,维护两个列表,一个维护楼层的请求列表,一个维护用户到达楼层的列表
Elevator::Elevator(int inElevatorID int inCurrentLevel)
{
elevatorID = inElevatorID;
currentLevel = inCurrentLevel;
elevatorStatus = STOP;
runThread = true;
elevatorRun = new thread(&Elevator::runthis);
elevatorRun->detach();
}
Elevator::~Elevator()
{
}
bool Elevator::addArriveList(char *name int src int det)
{
Person *client = new Person(name src det);
if (arriveList.size() == 0)
{
arriveList.push_back(client);
}else {
for (vector::iterator i = arriveList.begin(); i != arriveList.end(); i++)
{
if ((*i)->detlevel >= client->detlevel)
{
arriveList.insert(i client);
break;
}
}
}
return true;
}
bool Elevator::addRequest(char *name int src int det)
{
Person *client = new Person(name src det);
if (requestList.size() == 0)
{
requestList.push_back(client);
}else {
for (vector::iterator i = requestList.begin(); i != requestList.end(); i++)
{
if ((*i)->srclevel >= client->srclevel)
{
requestList.insert(i client);
break;
}
}
}
//打印测试用
for (vector::iterator i = requestList.begin(); i != requestList.end(); i++)
{
cout << “显示当前“ << this->elevatorID << “号电梯的请求用户:“ << endl;
cout << (*i)->name << endl;
}
return true;
}
void Elevator::openDoor()
{
cout << this->elevatorID << “号电梯到达“ << currentLevel << “楼....“ << endl;
}
void Elevator::clientArrive() //每到一层均检测是否有到达的用户
{
for (vector::iterator i = arriveList.begin(); i != arriveList.end();)
{
if ((*i)->detlevel == currentLevel)
{
openDoor();
std::cout << (*i)->name << “到达“ << currentLevel << “楼,离开“ < delete((*i));
i = arriveList.erase(i);
continue;
}
if (arriveList.size() == 0) {
this->elevatorStatus = STOP;
}
i++;
}
}
void Elevator::setElevatorStatus(int state)
{
this->elevatorStatus = state;
}
void Elevator::run()
{
while (this->runThread)
{
while (!this->requestList.empty() || !arriveList.empty())
{
locker.lock();
move();
locker.unlock();
std::this_thread::sleep_for(std::chrono::milliseconds(3000)); //ms,模拟电梯的运行时间
}
elevatorStatus = STOP;
}
}
/*
电梯移动的过程中进行进入用户的管理,以及到达用户迁出的处理
每个楼层均检测是否有用户要进入电梯,有则将用户信息从requestList列表删除,添加入arriveList列表
*/
void Elevator::move() //修改电梯移动的楼层,移动打印电梯所处的楼层
{
//显示进入电梯的client
for (vector::iterator i = requestList.begin(); i != requestList.end(); )
{
if ((*i)->srclevel == currentLevel)
{
//用户进入电梯,显示出来
cout <elevatorID<<“号电梯门打开,“<<(*i)->name << “在“ << (*i)->srclevel << “楼“ << “进入“ << elevatorID << “号电梯...“ << endl;
if (arriveList.empty()) {
this->elevatorStatus = (((*i)->detlevel - (*i)->srclevel) > 0 ? UP : DOWN);
}
addArriveList((*i)->name (*i)->srclevel (*i)->detlevel);
delete((*i));
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
..A..H. 50176 2016-11-19 22:38 elevator\elevator\.vs\elevator\v14\.suo
文件 137216 2016-11-19 22:17 elevator\elevator\Debug\elevator.exe
文件 660996 2016-11-19 22:17 elevator\elevator\Debug\elevator.ilk
文件 1380352 2016-11-19 22:17 elevator\elevator\Debug\elevator.pdb
文件 2640 2016-11-19 22:17 elevator\elevator\elevator\Debug\elevator.log
文件 377274 2016-11-19 22:17 elevator\elevator\elevator\Debug\Elevator.obj
文件 3407872 2016-11-19 22:17 elevator\elevator\elevator\Debug\elevator.pch
文件 3910 2016-11-19 22:17 elevator\elevator\elevator\Debug\elevator.tlog\CL.command.1.tlog
文件 115730 2016-11-19 22:17 elevator\elevator\elevator\Debug\elevator.tlog\CL.read.1.tlog
文件 3436 2016-11-19 22:17 elevator\elevator\elevator\Debug\elevator.tlog\CL.write.1.tlog
文件 182 2016-11-19 22:17 elevator\elevator\elevator\Debug\elevator.tlog\elevator.lastbuildstate
文件 2018 2016-11-19 22:17 elevator\elevator\elevator\Debug\elevator.tlog\li
文件 4480 2016-11-19 22:17 elevator\elevator\elevator\Debug\elevator.tlog\li
文件 1182 2016-11-19 22:17 elevator\elevator\elevator\Debug\elevator.tlog\li
文件 361033 2016-11-19 22:17 elevator\elevator\elevator\Debug\ElevatorBank.obj
文件 48423 2016-11-19 22:17 elevator\elevator\elevator\Debug\main.obj
文件 34195 2016-11-19 22:17 elevator\elevator\elevator\Debug\Person.obj
文件 12047 2016-11-19 22:17 elevator\elevator\elevator\Debug\stdafx.obj
文件 1174528 2016-11-19 22:17 elevator\elevator\elevator\Debug\vc140.idb
文件 667648 2016-11-19 22:17 elevator\elevator\elevator\Debug\vc140.pdb
文件 3899 2016-11-19 22:17 elevator\elevator\elevator\Elevator.cpp
文件 929 2016-11-19 22:16 elevator\elevator\elevator\Elevator.h
文件 8413 2016-11-18 15:43 elevator\elevator\elevator\elevator.vcxproj
文件 1861 2016-11-18 15:41 elevator\elevator\elevator\elevator.vcxproj.filters
文件 5625 2016-11-19 22:38 elevator\elevator\elevator\ElevatorBank.cpp
文件 683 2016-11-19 21:49 elevator\elevator\elevator\ElevatorBank.h
文件 236 2016-11-19 21:49 elevator\elevator\elevator\main.cpp
文件 239 2016-11-18 16:21 elevator\elevator\elevator\Person.cpp
文件 203 2016-11-18 16:21 elevator\elevator\elevator\Person.h
文件 1517 2016-11-16 14:24 elevator\elevator\elevator\ReadMe.txt
............此处省略20个文件信息
- 上一篇:MFC下opencv的图像处理源码
- 下一篇:图书管理系统软件设计C++源码
相关资源
- MFC多线程编程实例120658
- 利用MFC编写的一个模拟电梯程序
- C++并发编程实战(英文版)
- c++并发编程实战C++11完整pdf中文版
- c++ concurrency in action 2nd edition
- 支持多线程和断点续传的FTP客户端
- 给力仿真电梯MFC源码含报告
- Win32多线程程序设计 pdf高清
- C++基础与提高-王桂林(第二版)
- 医务室模拟_vc/类/多线程
- 深入理解C++11:C++11新特性解析与应用
- C11 C++11标准帮助文档中文版-20181230
- C++并发编程实战(中文版)
- VC H264格式视屏播放器源码
- Effective Modern C++ PDF完整版(英文)
- 用C语言做的电梯程序
- MFC多线程编程----多线程画线源码
- MFC创建多线程工作者线程demo
- C++电梯协调运行自动模拟
- Effective Modern C++ MOBI版本 KINDLE可用
- C++11教程参考书
- c语言模拟电梯程序可视化
- MFC多线程 多事件
- C++实现线程池源文件
- 基于对话框的多线程进度条更新
- MFC电梯模拟系统
- 基于UDP协议的简单聊天系统设计与实
- FTP多线程服务器源码
- 一个很好用的串口调试助手及源码
- C++ 多线程通信方式简介并结合生产者
评论
共有 条评论