• 大小: 9.27MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-10-05
  • 语言: C/C++
  • 标签: 多线程  C++11  电梯  

资源简介

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

资源截图

代码片段和文件信息

#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\link.command.1.tlog

     文件       4480  2016-11-19 22:17  elevator\elevator\elevator\Debug\elevator.tlog\link.read.1.tlog

     文件       1182  2016-11-19 22:17  elevator\elevator\elevator\Debug\elevator.tlog\link.write.1.tlog

     文件     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个文件信息

评论

共有 条评论