资源简介
该工程为多线程实现的电梯运行,可能有些情况没有考虑处理好,欢迎道友留言指正

代码片段和文件信息
#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的多线程文件传输
- C++多线程网络编程Socket
- VC++ 多线程文件读写操作
- 51单片机数码管四层电梯模拟系统
- c++11语言基础
- 多线程串口通讯
- Win32多线程程序设计--详细书签版
- 《C++程序设计原理与实践》第二版英
- C语言电梯调度算法
- C++11新标准中文版
- QT实现视音频实时传输qml+C++
- VC++MFC模拟四部电梯程序
- Linux多线程服务端编程:使用muduo C+
- 基于MFC的电梯调度仿真程序
- Effective Modern C++英文版及中文翻译
- 深入理解 C++11 :C++11 新特性解析与应
- TCP实现服务器和多客户端通信
- MultiThread(VS2013 MFC多线程-含源码-含个
- C++ 基本电梯
- C++编写的多线程C/S模式仿QQ软件
- 多线程
- C++ Concurrency in Action 2nd edition235206
- C++多线程网络聊天程序
- MFC中利用多线程实现定时器
- MFC实现多任务多线程软件
- MFC多线程编程三个
- 用C语言编写的电梯控制程序有界面显
- C++ Socket 多线程多机聊天
- 电梯仿真系统 c++
- MFC电梯程序
评论
共有 条评论