資源簡介
該工程為多線程實現的電梯運行,可能有些情況沒有考慮處理好,歡迎道友留言指正

代碼片段和文件信息
#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?<“顯示當前“?<elevatorID?<“號電梯的請求用戶:“?< cout?<(*i)->name?< }
return?true;
}
void?Elevator::openDoor()
{
cout?<elevatorID?<“號電梯到達“?<}
void?Elevator::clientArrive() //每到一層均檢測是否有到達的用戶
{
for?(vector::iterator?i?=?arriveList.begin();?i?!=?arriveList.end();)
{
if?((*i)->detlevel?==?currentLevel)
{
openDoor();
std::cout?<(*i)->name?<“到達“?< 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?<“樓“?<“進入“?<
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++源碼
評論
共有 條評論