/*Simulazione movimento Ascensore Utilizzando il Multithreading*/
#include <windows.h>
#include <process.h>
#include <iostream>
#include <string>
#define randomize srand((unsigned)time(NULL)) //costante randomize per "randomizzare" rand()
using namespace std;
/*Creo una classe persona, che contiene la funzione MoveToFloor, per simulare il movimento
in ascensore*/
class persona{
private:
string nome;
bool PressedButtom;
int RandomFloor;
public:
persona(): nome("null"), PressedButtom(false){};
persona(string _name, bool buttom): nome(_name), PressedButtom(buttom) {};
void MoveToFloor(){
if(PressedButtom)
RandomFloor=rand()%5+1;
else{
cout<<nome<<" non ha premuto il bottone o non esiste";
return;
}
if(RandomFloor==0) cout<<nome<<" ha sbagliato, e' gia' al piano terra\n";
cout<<nome<<" is moving to "<<RandomFloor<<endl;
switch(RandomFloor){
case 1:
_sleep(2000);
break;
case 2:
_sleep(4000);
break;
case 3:
_sleep(6000);
break;
case 4:
_sleep(7000);
break;
case 5:
_sleep(8000);
break;
}
cout<<"\n"<<nome<<" e' arrivato a destinazione al "<<RandomFloor<<" piano\n";
}
};
persona Massimo("Massimo",true);
//Funzione che verrà richiamata dal thread
void __cdecl MainThreadPerson(void *people){
randomize;
persona &Massimo=*static_cast<persona *>(people);
Massimo.MoveToFloor();
_endthread();
}
int main(){
cout<<"Simulazione Ascensore Utilizzando il Multithreading\n\n";
/*lancio il thread figlio con l' altra persona creata nella sezione
globale del codice*/
persona Mario("Mario",true);
_beginthread(MainThreadPerson, 0,static_cast<void *>(&Massimo));
_sleep(1000);
/*Mentre qui richiamo la funzione membro della classe con l' oggetto creato nella main
Per simulare il tempo di arrivo delle due persone*/
randomize;
Mario.MoveToFloor();
_sleep(4000);
cout<<"\nSimulazione Terminata\n";
system("pause");
return 0;
}