From 5ac05ee6b2118bfd0e2be627bd5e427eece0b9cb Mon Sep 17 00:00:00 2001 From: Dima77 Date: Tue, 9 Jun 2020 19:44:30 +0300 Subject: [PATCH 01/11] lesson 09-06-2020 - first push --- Lesson_9/SmartPointer/Car.cpp | 14 ++++ Lesson_9/SmartPointer/Car.h | 12 ++++ Lesson_9/SmartPointer/CarFactory.cpp | 8 +++ Lesson_9/SmartPointer/CarFactory.h | 7 ++ Lesson_9/SmartPointer/Driver.cpp | 26 +++++++ Lesson_9/SmartPointer/Driver.h | 16 +++++ Lesson_9/SmartPointer/SmartPointer.cpp | 72 ++----------------- Lesson_9/SmartPointer/SmartPointer.vcxproj | 9 +++ .../SmartPointer/SmartPointer.vcxproj.filters | 23 ++++++ Lesson_9/SmartPointer/stdafx.h | 4 ++ 10 files changed, 124 insertions(+), 67 deletions(-) create mode 100644 Lesson_9/SmartPointer/Car.cpp create mode 100644 Lesson_9/SmartPointer/Car.h create mode 100644 Lesson_9/SmartPointer/CarFactory.cpp create mode 100644 Lesson_9/SmartPointer/CarFactory.h create mode 100644 Lesson_9/SmartPointer/Driver.cpp create mode 100644 Lesson_9/SmartPointer/Driver.h create mode 100644 Lesson_9/SmartPointer/stdafx.h diff --git a/Lesson_9/SmartPointer/Car.cpp b/Lesson_9/SmartPointer/Car.cpp new file mode 100644 index 0000000..0246892 --- /dev/null +++ b/Lesson_9/SmartPointer/Car.cpp @@ -0,0 +1,14 @@ +#include "stdafx.h" +#include "Car.h" + +Car::Car(const std::string& color) + : color_(color) +{ + std::cout << color_ << " car has been created\n"; +} +Car::~Car() +{ std::cout << color_ << " car has been destroied\n"; } +void Car::Drive() +{ + std::cout << color_ << " car in move\n"; +} \ No newline at end of file diff --git a/Lesson_9/SmartPointer/Car.h b/Lesson_9/SmartPointer/Car.h new file mode 100644 index 0000000..72b4ebc --- /dev/null +++ b/Lesson_9/SmartPointer/Car.h @@ -0,0 +1,12 @@ +#pragma once + +class Car +{ +public: + Car(const std::string& color); + ~Car(); + void Drive(); +private: + std::string color_; +}; + diff --git a/Lesson_9/SmartPointer/CarFactory.cpp b/Lesson_9/SmartPointer/CarFactory.cpp new file mode 100644 index 0000000..943bfc5 --- /dev/null +++ b/Lesson_9/SmartPointer/CarFactory.cpp @@ -0,0 +1,8 @@ +#include "stdafx.h" +#include "CarFactory.h" +#include "Car.h" + +std::unique_ptr CarFactory::BuildCar(const std::string& color) +{ + return std::unique_ptr(new Car(color)); +} \ No newline at end of file diff --git a/Lesson_9/SmartPointer/CarFactory.h b/Lesson_9/SmartPointer/CarFactory.h new file mode 100644 index 0000000..962e750 --- /dev/null +++ b/Lesson_9/SmartPointer/CarFactory.h @@ -0,0 +1,7 @@ +#pragma once + +class CarFactory +{ +public: + std::unique_ptr BuildCar(const std::string& color); +}; diff --git a/Lesson_9/SmartPointer/Driver.cpp b/Lesson_9/SmartPointer/Driver.cpp new file mode 100644 index 0000000..1789124 --- /dev/null +++ b/Lesson_9/SmartPointer/Driver.cpp @@ -0,0 +1,26 @@ +#include "stdafx.h" +#include "Driver.h" +#include "CarFactory.h" +#include "Car.h" + +Driver::Driver(const std::string& name, std::shared_ptr factory) + : factory_(factory) + , name_(name) +{ +} +void Driver::BuyCar(const std::string& color) +{ + car_ = factory_->BuildCar(color); +} +void Driver::Go() +{ + if (car_ != nullptr) + { + std::cout << name_ << " I have a car "; + car_->Drive(); + } + else + { + std::cout << name_ << ": I'll go on foot\n"; + } +} \ No newline at end of file diff --git a/Lesson_9/SmartPointer/Driver.h b/Lesson_9/SmartPointer/Driver.h new file mode 100644 index 0000000..29b5222 --- /dev/null +++ b/Lesson_9/SmartPointer/Driver.h @@ -0,0 +1,16 @@ +#pragma once + +class Driver +{ +public: + Driver(const std::string& name, std::shared_ptr factory); + void BuyCar(const std::string& color); + // SellCar + // BuyUsedCar + void Go(); +private: + std::unique_ptr car_; + std::shared_ptr factory_; + std::string name_; +}; + diff --git a/Lesson_9/SmartPointer/SmartPointer.cpp b/Lesson_9/SmartPointer/SmartPointer.cpp index 3e3666f..a8198bd 100644 --- a/Lesson_9/SmartPointer/SmartPointer.cpp +++ b/Lesson_9/SmartPointer/SmartPointer.cpp @@ -1,70 +1,8 @@ -#include -#include -#include - -class Car -{ -public: - Car(const std::string& color) - : color_(color) - { - std::cout << color_ << " car has been created\n"; - } - ~Car() { std::cout << color_ << " car has been destroied\n"; } - - void Drive() - { - std::cout << color_ << " car in move\n"; - } - -private: - std::string color_; -}; - -class CarFactory -{ -public: - std::unique_ptr BuildCar(const std::string& color) - { - return std::unique_ptr(new Car(color)); - } -}; - -class Driver -{ -public: - Driver(const std::string& name, std::shared_ptr factory) - : factory_(factory) - , name_(name) - { - } - - void BuyCar(const std::string& color) - { - car_ = factory_->BuildCar(color); - } - - // SellCar - // BuyUsedCar - - void Go() - { - if (car_ != nullptr) - { - std::cout << name_ << " I have a car "; - car_->Drive(); - } - else - { - std::cout << name_ << ": I'll go on foot\n"; - } - } - -private: - std::unique_ptr car_; - std::shared_ptr factory_; - std::string name_; -}; +#include "stdafx.h" +#include "Driver.h" +#include "Driver.h" +#include "CarFactory.h" +#include "Car.h" int main() { diff --git a/Lesson_9/SmartPointer/SmartPointer.vcxproj b/Lesson_9/SmartPointer/SmartPointer.vcxproj index 6150fc1..102d396 100644 --- a/Lesson_9/SmartPointer/SmartPointer.vcxproj +++ b/Lesson_9/SmartPointer/SmartPointer.vcxproj @@ -151,8 +151,17 @@ + + + + + + + + + diff --git a/Lesson_9/SmartPointer/SmartPointer.vcxproj.filters b/Lesson_9/SmartPointer/SmartPointer.vcxproj.filters index 46986af..0218a9b 100644 --- a/Lesson_9/SmartPointer/SmartPointer.vcxproj.filters +++ b/Lesson_9/SmartPointer/SmartPointer.vcxproj.filters @@ -18,5 +18,28 @@ Source Files + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + \ No newline at end of file diff --git a/Lesson_9/SmartPointer/stdafx.h b/Lesson_9/SmartPointer/stdafx.h new file mode 100644 index 0000000..b66c4d6 --- /dev/null +++ b/Lesson_9/SmartPointer/stdafx.h @@ -0,0 +1,4 @@ +#pragma once +#include +#include +#include From 5d8d00848425293976f637b1bdf90a2170050c65 Mon Sep 17 00:00:00 2001 From: Dima77 Date: Tue, 9 Jun 2020 20:14:24 +0300 Subject: [PATCH 02/11] chande header --- Lesson_9/SmartPointer/Car.cpp | 2 +- Lesson_9/SmartPointer/CarFactory.cpp | 4 ++-- Lesson_9/SmartPointer/CarFactory.h | 1 + Lesson_9/SmartPointer/Driver.cpp | 6 +++--- Lesson_9/SmartPointer/Driver.h | 3 +++ Lesson_9/SmartPointer/SmartPointer.vcxproj | 10 +++++----- Lesson_9/SmartPointer/stdafx.h | 3 +++ Lesson_9/StdThread/StdThread.vcxproj | 10 +++++----- 8 files changed, 23 insertions(+), 16 deletions(-) diff --git a/Lesson_9/SmartPointer/Car.cpp b/Lesson_9/SmartPointer/Car.cpp index 0246892..372b655 100644 --- a/Lesson_9/SmartPointer/Car.cpp +++ b/Lesson_9/SmartPointer/Car.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Car.h" + Car::Car(const std::string& color) : color_(color) diff --git a/Lesson_9/SmartPointer/CarFactory.cpp b/Lesson_9/SmartPointer/CarFactory.cpp index 943bfc5..6040b4b 100644 --- a/Lesson_9/SmartPointer/CarFactory.cpp +++ b/Lesson_9/SmartPointer/CarFactory.cpp @@ -1,6 +1,6 @@ #include "stdafx.h" -#include "CarFactory.h" -#include "Car.h" +//#include "CarFactory.h" + std::unique_ptr CarFactory::BuildCar(const std::string& color) { diff --git a/Lesson_9/SmartPointer/CarFactory.h b/Lesson_9/SmartPointer/CarFactory.h index 962e750..bf6a71a 100644 --- a/Lesson_9/SmartPointer/CarFactory.h +++ b/Lesson_9/SmartPointer/CarFactory.h @@ -1,4 +1,5 @@ #pragma once +#include "Car.h" class CarFactory { diff --git a/Lesson_9/SmartPointer/Driver.cpp b/Lesson_9/SmartPointer/Driver.cpp index 1789124..ec85549 100644 --- a/Lesson_9/SmartPointer/Driver.cpp +++ b/Lesson_9/SmartPointer/Driver.cpp @@ -1,7 +1,7 @@ #include "stdafx.h" -#include "Driver.h" -#include "CarFactory.h" -#include "Car.h" +//#include "CarFactory.h" +//#include "Car.h" +//#include "Driver.h" Driver::Driver(const std::string& name, std::shared_ptr factory) : factory_(factory) diff --git a/Lesson_9/SmartPointer/Driver.h b/Lesson_9/SmartPointer/Driver.h index 29b5222..27dce53 100644 --- a/Lesson_9/SmartPointer/Driver.h +++ b/Lesson_9/SmartPointer/Driver.h @@ -1,4 +1,7 @@ #pragma once +#include "Driver.h" +#include "CarFactory.h" +#include "Car.h" class Driver { diff --git a/Lesson_9/SmartPointer/SmartPointer.vcxproj b/Lesson_9/SmartPointer/SmartPointer.vcxproj index 102d396..cd9c0f3 100644 --- a/Lesson_9/SmartPointer/SmartPointer.vcxproj +++ b/Lesson_9/SmartPointer/SmartPointer.vcxproj @@ -23,32 +23,32 @@ {F6CAC44C-D7A8-48BA-B457-F0FD6A929F1C} Win32Proj SmartPointer - 10.0.17763.0 + 10.0 Application true - v141 + v142 Unicode Application false - v141 + v142 true Unicode Application true - v141 + v142 Unicode Application false - v141 + v142 true Unicode diff --git a/Lesson_9/SmartPointer/stdafx.h b/Lesson_9/SmartPointer/stdafx.h index b66c4d6..7555f0a 100644 --- a/Lesson_9/SmartPointer/stdafx.h +++ b/Lesson_9/SmartPointer/stdafx.h @@ -2,3 +2,6 @@ #include #include #include +#include "Driver.h" +#include "CarFactory.h" +#include "Car.h" diff --git a/Lesson_9/StdThread/StdThread.vcxproj b/Lesson_9/StdThread/StdThread.vcxproj index d2e65cc..0375706 100644 --- a/Lesson_9/StdThread/StdThread.vcxproj +++ b/Lesson_9/StdThread/StdThread.vcxproj @@ -23,32 +23,32 @@ {52F68E52-72B0-44B0-84D7-CBE3CAB4537B} Win32Proj StdThread - 10.0.17763.0 + 10.0 Application true - v141 + v142 Unicode Application false - v141 + v142 true Unicode Application true - v141 + v142 Unicode Application false - v141 + v142 true Unicode From 1d458b7718d84e842f63e3be50c4bdc39f741cc7 Mon Sep 17 00:00:00 2001 From: Dima77 Date: Tue, 9 Jun 2020 21:08:46 +0300 Subject: [PATCH 03/11] third vertion --- Lesson_9/SmartPointer/Car.h | 2 +- Lesson_9/SmartPointer/CarFactory.cpp | 2 +- Lesson_9/SmartPointer/CarFactory.h | 1 + Lesson_9/SmartPointer/Driver.cpp | 11 ++++++++--- Lesson_9/SmartPointer/Driver.h | 5 +++-- Lesson_9/SmartPointer/SmartPointer.cpp | 15 +++++++++++---- 6 files changed, 25 insertions(+), 11 deletions(-) diff --git a/Lesson_9/SmartPointer/Car.h b/Lesson_9/SmartPointer/Car.h index 72b4ebc..b4b0941 100644 --- a/Lesson_9/SmartPointer/Car.h +++ b/Lesson_9/SmartPointer/Car.h @@ -1,5 +1,5 @@ #pragma once - +#include "stdafx.h" class Car { public: diff --git a/Lesson_9/SmartPointer/CarFactory.cpp b/Lesson_9/SmartPointer/CarFactory.cpp index 6040b4b..4827a0d 100644 --- a/Lesson_9/SmartPointer/CarFactory.cpp +++ b/Lesson_9/SmartPointer/CarFactory.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -//#include "CarFactory.h" + std::unique_ptr CarFactory::BuildCar(const std::string& color) diff --git a/Lesson_9/SmartPointer/CarFactory.h b/Lesson_9/SmartPointer/CarFactory.h index bf6a71a..3956e4c 100644 --- a/Lesson_9/SmartPointer/CarFactory.h +++ b/Lesson_9/SmartPointer/CarFactory.h @@ -1,4 +1,5 @@ #pragma once +#include "stdafx.h" #include "Car.h" class CarFactory diff --git a/Lesson_9/SmartPointer/Driver.cpp b/Lesson_9/SmartPointer/Driver.cpp index ec85549..973cdb6 100644 --- a/Lesson_9/SmartPointer/Driver.cpp +++ b/Lesson_9/SmartPointer/Driver.cpp @@ -1,7 +1,4 @@ #include "stdafx.h" -//#include "CarFactory.h" -//#include "Car.h" -//#include "Driver.h" Driver::Driver(const std::string& name, std::shared_ptr factory) : factory_(factory) @@ -23,4 +20,12 @@ void Driver::Go() { std::cout << name_ << ": I'll go on foot\n"; } +} +void Driver::BuyUsedCar(Driver* d) +{ + car_ = d->CellCar(); +} +std::unique_ptr Driver::CellCar() +{ + return std::unique_ptr (car_.release()); } \ No newline at end of file diff --git a/Lesson_9/SmartPointer/Driver.h b/Lesson_9/SmartPointer/Driver.h index 27dce53..e66f578 100644 --- a/Lesson_9/SmartPointer/Driver.h +++ b/Lesson_9/SmartPointer/Driver.h @@ -1,4 +1,5 @@ #pragma once +#include "stdafx.h" #include "Driver.h" #include "CarFactory.h" #include "Car.h" @@ -8,8 +9,8 @@ class Driver public: Driver(const std::string& name, std::shared_ptr factory); void BuyCar(const std::string& color); - // SellCar - // BuyUsedCar + void BuyUsedCar(Driver* d); + std::unique_ptr CellCar(); void Go(); private: std::unique_ptr car_; diff --git a/Lesson_9/SmartPointer/SmartPointer.cpp b/Lesson_9/SmartPointer/SmartPointer.cpp index a8198bd..4ad946f 100644 --- a/Lesson_9/SmartPointer/SmartPointer.cpp +++ b/Lesson_9/SmartPointer/SmartPointer.cpp @@ -9,7 +9,16 @@ int main() std::shared_ptr factory(new CarFactory()); Driver driver1("Bob", factory); driver1.Go(); - + driver1.BuyCar("red"); + driver1.Go(); + driver1.CellCar(); + driver1.Go(); + driver1.BuyCar("green"); + Driver driver2("Jim", factory); + driver2.Go(); + driver2.BuyUsedCar(&driver1); + driver2.Go(); + /* driver1.BuyCar("red"); driver1.Go(); @@ -24,8 +33,6 @@ int main() driver2.Go(); driver2.BuyCar("blue"); - driver2.Go(); - - + driver2.Go();*/ return 0; } \ No newline at end of file From a9c9de85c43ea58519e87dcf79c71ae890a8399d Mon Sep 17 00:00:00 2001 From: Dima77 Date: Tue, 9 Jun 2020 21:17:25 +0300 Subject: [PATCH 04/11] autochool in progress --- Lesson_9/SmartPointer/autoschool.cpp | 0 Lesson_9/SmartPointer/autoschool.h | 10 ++++++++++ 2 files changed, 10 insertions(+) create mode 100644 Lesson_9/SmartPointer/autoschool.cpp create mode 100644 Lesson_9/SmartPointer/autoschool.h diff --git a/Lesson_9/SmartPointer/autoschool.cpp b/Lesson_9/SmartPointer/autoschool.cpp new file mode 100644 index 0000000..e69de29 diff --git a/Lesson_9/SmartPointer/autoschool.h b/Lesson_9/SmartPointer/autoschool.h new file mode 100644 index 0000000..f36c497 --- /dev/null +++ b/Lesson_9/SmartPointer/autoschool.h @@ -0,0 +1,10 @@ +#pragma once +class autoschool +{ + autoschool(int numbersOfDrivers) + { + for (int i =0;i< numbersOfDrivers;) + HANDLE starDriversCreate = + } +}; + From 1ac66081d4cf6b86f28cf3c47537aaddb6c6d912 Mon Sep 17 00:00:00 2001 From: Dima77 Date: Thu, 11 Jun 2020 17:25:44 +0300 Subject: [PATCH 05/11] 11-06-2020 driverschool and manager with mistake --- Lesson_9/SmartPointer/Car.cpp | 1 + Lesson_9/SmartPointer/Car.h | 2 +- Lesson_9/SmartPointer/CarFactory.cpp | 3 +- Lesson_9/SmartPointer/CarFactory.h | 1 - Lesson_9/SmartPointer/Driver.cpp | 9 +++-- Lesson_9/SmartPointer/Driver.h | 4 +-- Lesson_9/SmartPointer/DriverManager.cpp | 14 ++++++++ Lesson_9/SmartPointer/DriverManager.h | 15 ++++++++ Lesson_9/SmartPointer/SmartPointer.cpp | 10 +++++- Lesson_9/SmartPointer/SmartPointer.vcxproj | 4 +++ .../SmartPointer/SmartPointer.vcxproj.filters | 12 +++++++ Lesson_9/SmartPointer/autoschool.cpp | 35 +++++++++++++++++++ Lesson_9/SmartPointer/autoschool.h | 20 +++++++---- Lesson_9/SmartPointer/stdafx.h | 6 ++-- 14 files changed, 117 insertions(+), 19 deletions(-) create mode 100644 Lesson_9/SmartPointer/DriverManager.cpp create mode 100644 Lesson_9/SmartPointer/DriverManager.h diff --git a/Lesson_9/SmartPointer/Car.cpp b/Lesson_9/SmartPointer/Car.cpp index 372b655..73a5593 100644 --- a/Lesson_9/SmartPointer/Car.cpp +++ b/Lesson_9/SmartPointer/Car.cpp @@ -1,4 +1,5 @@ #include "stdafx.h" +#include "Car.h" Car::Car(const std::string& color) diff --git a/Lesson_9/SmartPointer/Car.h b/Lesson_9/SmartPointer/Car.h index b4b0941..72b4ebc 100644 --- a/Lesson_9/SmartPointer/Car.h +++ b/Lesson_9/SmartPointer/Car.h @@ -1,5 +1,5 @@ #pragma once -#include "stdafx.h" + class Car { public: diff --git a/Lesson_9/SmartPointer/CarFactory.cpp b/Lesson_9/SmartPointer/CarFactory.cpp index 4827a0d..6c492b2 100644 --- a/Lesson_9/SmartPointer/CarFactory.cpp +++ b/Lesson_9/SmartPointer/CarFactory.cpp @@ -1,5 +1,6 @@ #include "stdafx.h" - +#include "Car.h" +#include "CarFactory.h" std::unique_ptr CarFactory::BuildCar(const std::string& color) diff --git a/Lesson_9/SmartPointer/CarFactory.h b/Lesson_9/SmartPointer/CarFactory.h index 3956e4c..bf6a71a 100644 --- a/Lesson_9/SmartPointer/CarFactory.h +++ b/Lesson_9/SmartPointer/CarFactory.h @@ -1,5 +1,4 @@ #pragma once -#include "stdafx.h" #include "Car.h" class CarFactory diff --git a/Lesson_9/SmartPointer/Driver.cpp b/Lesson_9/SmartPointer/Driver.cpp index 973cdb6..5dd7083 100644 --- a/Lesson_9/SmartPointer/Driver.cpp +++ b/Lesson_9/SmartPointer/Driver.cpp @@ -1,4 +1,7 @@ #include "stdafx.h" +#include "Car.h" +#include "CarFactory.h" +#include "Driver.h" Driver::Driver(const std::string& name, std::shared_ptr factory) : factory_(factory) @@ -23,9 +26,9 @@ void Driver::Go() } void Driver::BuyUsedCar(Driver* d) { - car_ = d->CellCar(); + car_ = d->SellCar(); } -std::unique_ptr Driver::CellCar() +std::unique_ptr Driver::SellCar() { return std::unique_ptr (car_.release()); -} \ No newline at end of file +} diff --git a/Lesson_9/SmartPointer/Driver.h b/Lesson_9/SmartPointer/Driver.h index e66f578..59fc2e4 100644 --- a/Lesson_9/SmartPointer/Driver.h +++ b/Lesson_9/SmartPointer/Driver.h @@ -1,5 +1,5 @@ #pragma once -#include "stdafx.h" + #include "Driver.h" #include "CarFactory.h" #include "Car.h" @@ -10,7 +10,7 @@ class Driver Driver(const std::string& name, std::shared_ptr factory); void BuyCar(const std::string& color); void BuyUsedCar(Driver* d); - std::unique_ptr CellCar(); + std::unique_ptr SellCar(); void Go(); private: std::unique_ptr car_; diff --git a/Lesson_9/SmartPointer/DriverManager.cpp b/Lesson_9/SmartPointer/DriverManager.cpp new file mode 100644 index 0000000..afdb28f --- /dev/null +++ b/Lesson_9/SmartPointer/DriverManager.cpp @@ -0,0 +1,14 @@ +#include "stdafx.h" +#include "CarFactory.h" +#include "Driver.h" +#include "DriverManager.h" + +DriverManager::DriverManager(const std::string& nameManager, std::shared_ptr factory) + : factory_(factory) + , nameManager_(nameManager), ManagerDrivers_(0) +{ +} +void DriverManager::GetOneDriver(std::unique_ptr CurrentDriver) +{ + OneDriver_ = std::move(CurrentDriver); +} diff --git a/Lesson_9/SmartPointer/DriverManager.h b/Lesson_9/SmartPointer/DriverManager.h new file mode 100644 index 0000000..d8759ac --- /dev/null +++ b/Lesson_9/SmartPointer/DriverManager.h @@ -0,0 +1,15 @@ +#pragma once +class DriverManager +{ +public: + DriverManager(const std::string& nameManager, std::shared_ptr factory); + + void GetOneDriver(std::unique_ptr CurrentDriver); + +private: + std::string nameManager_; + std::shared_ptr factory_; + std::vector> ManagerDrivers_; + std::unique_ptr OneDriver_; +}; + diff --git a/Lesson_9/SmartPointer/SmartPointer.cpp b/Lesson_9/SmartPointer/SmartPointer.cpp index 4ad946f..364beb6 100644 --- a/Lesson_9/SmartPointer/SmartPointer.cpp +++ b/Lesson_9/SmartPointer/SmartPointer.cpp @@ -3,15 +3,23 @@ #include "Driver.h" #include "CarFactory.h" #include "Car.h" +#include "DriverManager.h" +#include "autoschool.h" int main() { std::shared_ptr factory(new CarFactory()); + autoschool mySchool(10, "Ivan",factory); + std::thread th(&autoschool::threadfuct, &mySchool); + th.join(); + mySchool.showDrivers(); + + /* Driver driver1("Bob", factory); driver1.Go(); driver1.BuyCar("red"); driver1.Go(); - driver1.CellCar(); + driver1.SellCar(); driver1.Go(); driver1.BuyCar("green"); Driver driver2("Jim", factory); diff --git a/Lesson_9/SmartPointer/SmartPointer.vcxproj b/Lesson_9/SmartPointer/SmartPointer.vcxproj index cd9c0f3..8477a7f 100644 --- a/Lesson_9/SmartPointer/SmartPointer.vcxproj +++ b/Lesson_9/SmartPointer/SmartPointer.vcxproj @@ -151,15 +151,19 @@ + + + + diff --git a/Lesson_9/SmartPointer/SmartPointer.vcxproj.filters b/Lesson_9/SmartPointer/SmartPointer.vcxproj.filters index 0218a9b..9d7b5ad 100644 --- a/Lesson_9/SmartPointer/SmartPointer.vcxproj.filters +++ b/Lesson_9/SmartPointer/SmartPointer.vcxproj.filters @@ -27,6 +27,12 @@ Source Files + + Source Files + + + Source Files + @@ -41,5 +47,11 @@ Header Files + + Header Files + + + Header Files + \ No newline at end of file diff --git a/Lesson_9/SmartPointer/autoschool.cpp b/Lesson_9/SmartPointer/autoschool.cpp index e69de29..7453416 100644 --- a/Lesson_9/SmartPointer/autoschool.cpp +++ b/Lesson_9/SmartPointer/autoschool.cpp @@ -0,0 +1,35 @@ +#include "stdafx.h" +#include "autoschool.h" +#include "CarFactory.h" +#include "Driver.h" +#include "Car.h" +#include "DriverManager.h" + +autoschool::autoschool(int numbersOfDrivers, std::string name, std::shared_ptr factory) + :factory_(factory), name_(name), numbersOfDrivers_(numbersOfDrivers) +{} + +void autoschool::threadfuct() +{ + for (int i = 0; i < numbersOfDrivers_; i++) + { + //1) create Drivers: + //one way: + //std::unique_ptr < Driver> currentDriver(new Driver("Ivan", factory_)); + //DriversInAutoschool_.push_back(std::move(currentDriver)); + //secondway: same but less code + DriversInAutoschool_.push_back(std::unique_ptr < Driver>(new Driver("Ivan", factory_))); + //2) Create Managers: + DriverManagers_.push_back(std::unique_ptr (new DriverManager("Stepan", factory_))); + //3)Give Driver to Manager: + //UPS Here I have mistake: + //DriverManagers_[i]->GetOneDriver(DriversInAutoschool_[i].release); + } +} +void autoschool::showDrivers() +{ + for (int i = 0; i < numbersOfDrivers_; i++) + { + DriversInAutoschool_[i]->Go(); + } +} \ No newline at end of file diff --git a/Lesson_9/SmartPointer/autoschool.h b/Lesson_9/SmartPointer/autoschool.h index f36c497..2d732ba 100644 --- a/Lesson_9/SmartPointer/autoschool.h +++ b/Lesson_9/SmartPointer/autoschool.h @@ -1,10 +1,16 @@ #pragma once + class autoschool { - autoschool(int numbersOfDrivers) - { - for (int i =0;i< numbersOfDrivers;) - HANDLE starDriversCreate = - } -}; - +public: + autoschool(int numbersOfDrivers, std::string name, std::shared_ptr factory); + void threadfuct(); + void showDrivers(); + +private: + int numbersOfDrivers_; + std::string name_; + std::shared_ptr factory_; + std::vector> DriversInAutoschool_; + std::vector> DriverManagers_; +}; \ No newline at end of file diff --git a/Lesson_9/SmartPointer/stdafx.h b/Lesson_9/SmartPointer/stdafx.h index 7555f0a..4024f93 100644 --- a/Lesson_9/SmartPointer/stdafx.h +++ b/Lesson_9/SmartPointer/stdafx.h @@ -2,6 +2,6 @@ #include #include #include -#include "Driver.h" -#include "CarFactory.h" -#include "Car.h" +#include +#include +#include From 0a8af38e9147087e6d44440a04e491cb8f14d055 Mon Sep 17 00:00:00 2001 From: Dima77 Date: Fri, 12 Jun 2020 18:04:47 +0300 Subject: [PATCH 06/11] 12-06-2020 --- Lesson_9/SmartPointer/Car.cpp | 2 +- Lesson_9/SmartPointer/Driver.cpp | 11 ++++++ Lesson_9/SmartPointer/Driver.h | 7 ++-- Lesson_9/SmartPointer/DriverManager.cpp | 29 ++++++++++++++- Lesson_9/SmartPointer/DriverManager.h | 10 +++-- Lesson_9/SmartPointer/SmartPointer.cpp | 13 ++++++- .../SmartPointer/SmartPointer.vcxproj.filters | 4 +- Lesson_9/SmartPointer/autoschool.cpp | 37 ++++++++++++++----- Lesson_9/SmartPointer/autoschool.h | 11 ++++-- 9 files changed, 97 insertions(+), 27 deletions(-) diff --git a/Lesson_9/SmartPointer/Car.cpp b/Lesson_9/SmartPointer/Car.cpp index 73a5593..fed8e63 100644 --- a/Lesson_9/SmartPointer/Car.cpp +++ b/Lesson_9/SmartPointer/Car.cpp @@ -12,4 +12,4 @@ Car::~Car() void Car::Drive() { std::cout << color_ << " car in move\n"; -} \ No newline at end of file +} diff --git a/Lesson_9/SmartPointer/Driver.cpp b/Lesson_9/SmartPointer/Driver.cpp index 5dd7083..766c1bc 100644 --- a/Lesson_9/SmartPointer/Driver.cpp +++ b/Lesson_9/SmartPointer/Driver.cpp @@ -32,3 +32,14 @@ std::unique_ptr Driver::SellCar() { return std::unique_ptr (car_.release()); } +void Driver::ShowDriverInfo() +{ + std::cout<< name_<car_ << std::endl; +} +void Driver::operator()(std::unique_ptr < Driver> dr) +{ + //Driver* currentD = dr.get(); + dr->Go(); + this->Go(); +} + diff --git a/Lesson_9/SmartPointer/Driver.h b/Lesson_9/SmartPointer/Driver.h index 59fc2e4..cd33871 100644 --- a/Lesson_9/SmartPointer/Driver.h +++ b/Lesson_9/SmartPointer/Driver.h @@ -1,8 +1,6 @@ #pragma once - -#include "Driver.h" -#include "CarFactory.h" #include "Car.h" +#include "CarFactory.h" class Driver { @@ -12,6 +10,9 @@ class Driver void BuyUsedCar(Driver* d); std::unique_ptr SellCar(); void Go(); + void ShowDriverInfo(); + void operator()(std::unique_ptr < Driver>); + private: std::unique_ptr car_; std::shared_ptr factory_; diff --git a/Lesson_9/SmartPointer/DriverManager.cpp b/Lesson_9/SmartPointer/DriverManager.cpp index afdb28f..264dd64 100644 --- a/Lesson_9/SmartPointer/DriverManager.cpp +++ b/Lesson_9/SmartPointer/DriverManager.cpp @@ -1,14 +1,39 @@ #include "stdafx.h" #include "CarFactory.h" #include "Driver.h" +#include "Car.h" #include "DriverManager.h" -DriverManager::DriverManager(const std::string& nameManager, std::shared_ptr factory) +DriverManager::DriverManager(const std::string& nameManager, std::shared_ptr& factory) : factory_(factory) , nameManager_(nameManager), ManagerDrivers_(0) + , OneDriver_(nullptr) { } void DriverManager::GetOneDriver(std::unique_ptr CurrentDriver) { - OneDriver_ = std::move(CurrentDriver); + //OneDriver_ = std::unique_ptr(std::move(CurrentDriver)); + OneDriver_=std::move(CurrentDriver); +} +void DriverManager::ShowOneDriver() +{ + std::cout << "OneDriver_="<< OneDriver_; + OneDriver_->Go(); +} +void DriverManager::ThreaFunctionManager() +{ + + int i = 100; + while (i) + { + OneDriver_->Go(); + std::this_thread::sleep_for(std::chrono::milliseconds(1000)); + i--; + } +} +void DriverManager::startThread() +{ + std::cout << "go! ";//it works! + //failed to implement through functor and this line stil doesn't work: + std::thread th_(&ThreaFunctionManager,OneDriver_); } diff --git a/Lesson_9/SmartPointer/DriverManager.h b/Lesson_9/SmartPointer/DriverManager.h index d8759ac..6bc818e 100644 --- a/Lesson_9/SmartPointer/DriverManager.h +++ b/Lesson_9/SmartPointer/DriverManager.h @@ -1,11 +1,15 @@ #pragma once +#include "Driver.h" +#include "CarFactory.h" +#include "Car.h" class DriverManager { public: - DriverManager(const std::string& nameManager, std::shared_ptr factory); - + DriverManager(const std::string& nameManager, std::shared_ptr& factory); void GetOneDriver(std::unique_ptr CurrentDriver); - + void ShowOneDriver(); + void startThread(); + void ThreaFunctionManager(); private: std::string nameManager_; std::shared_ptr factory_; diff --git a/Lesson_9/SmartPointer/SmartPointer.cpp b/Lesson_9/SmartPointer/SmartPointer.cpp index 364beb6..02a282b 100644 --- a/Lesson_9/SmartPointer/SmartPointer.cpp +++ b/Lesson_9/SmartPointer/SmartPointer.cpp @@ -5,15 +5,24 @@ #include "Car.h" #include "DriverManager.h" #include "autoschool.h" +//----- +#include +#include +#include +#include +#include +#include int main() { + std::shared_ptr factory(new CarFactory()); autoschool mySchool(10, "Ivan",factory); std::thread th(&autoschool::threadfuct, &mySchool); th.join(); - mySchool.showDrivers(); - + //mySchool.showDrivers(); + mySchool.showDriversofManagers(); + /* Driver driver1("Bob", factory); driver1.Go(); diff --git a/Lesson_9/SmartPointer/SmartPointer.vcxproj.filters b/Lesson_9/SmartPointer/SmartPointer.vcxproj.filters index 9d7b5ad..74f6a23 100644 --- a/Lesson_9/SmartPointer/SmartPointer.vcxproj.filters +++ b/Lesson_9/SmartPointer/SmartPointer.vcxproj.filters @@ -47,10 +47,10 @@ Header Files - + Header Files - + Header Files diff --git a/Lesson_9/SmartPointer/autoschool.cpp b/Lesson_9/SmartPointer/autoschool.cpp index 7453416..4009615 100644 --- a/Lesson_9/SmartPointer/autoschool.cpp +++ b/Lesson_9/SmartPointer/autoschool.cpp @@ -5,10 +5,11 @@ #include "Car.h" #include "DriverManager.h" -autoschool::autoschool(int numbersOfDrivers, std::string name, std::shared_ptr factory) +autoschool::autoschool(int numbersOfDrivers, std::string name, std::shared_ptr& factory) :factory_(factory), name_(name), numbersOfDrivers_(numbersOfDrivers) -{} - +{ + DriversInAutoschool_.clear(); +} void autoschool::threadfuct() { for (int i = 0; i < numbersOfDrivers_; i++) @@ -18,18 +19,34 @@ void autoschool::threadfuct() //std::unique_ptr < Driver> currentDriver(new Driver("Ivan", factory_)); //DriversInAutoschool_.push_back(std::move(currentDriver)); //secondway: same but less code - DriversInAutoschool_.push_back(std::unique_ptr < Driver>(new Driver("Ivan", factory_))); - //2) Create Managers: - DriverManagers_.push_back(std::unique_ptr (new DriverManager("Stepan", factory_))); - //3)Give Driver to Manager: - //UPS Here I have mistake: - //DriverManagers_[i]->GetOneDriver(DriversInAutoschool_[i].release); + DriversInAutoschool_.push_back(std::make_unique < Driver>(name_, factory_)); + //2) Create Managers - inside DriverSchool(autoschool): + DriverManagers_.push_back(std::make_unique ("Stepan", factory_)); + } + //3)Give Driver to Manager - one driver - one manager: + for (int i = 0; i < numbersOfDrivers_; i++) + { + DriverManagers_[i]->GetOneDriver(std::move(std::unique_ptr(DriversInAutoschool_[i].release()))); + } + //4)Everybody DriverManager strat Go for his Driver (OneDriver) in thread + for (int i = 0; i < numbersOfDrivers_; i++) + { + DriverManagers_[i]->startThread(); } } -void autoschool::showDrivers() + +void autoschool::showDrivers() //use before launch showDriversofManagers() { for (int i = 0; i < numbersOfDrivers_; i++) { DriversInAutoschool_[i]->Go(); } +} +void autoschool::showDriversofManagers() // use before launch showDrivers() +{ + for (int i = 0; i < numbersOfDrivers_; i++) + { + std::cout << "Manager" << i + 1 << "has Driver: "; + DriverManagers_[i]->ShowOneDriver(); + } } \ No newline at end of file diff --git a/Lesson_9/SmartPointer/autoschool.h b/Lesson_9/SmartPointer/autoschool.h index 2d732ba..d3a18b1 100644 --- a/Lesson_9/SmartPointer/autoschool.h +++ b/Lesson_9/SmartPointer/autoschool.h @@ -1,13 +1,16 @@ #pragma once - +#include "CarFactory.h" +#include "Driver.h" +#include "Car.h" +#include "DriverManager.h" class autoschool { public: - autoschool(int numbersOfDrivers, std::string name, std::shared_ptr factory); + autoschool(int numbersOfDrivers, std::string name, std::shared_ptr& factory); void threadfuct(); void showDrivers(); - -private: + void showDriversofManagers(); + private: int numbersOfDrivers_; std::string name_; std::shared_ptr factory_; From b824a87b5c54da1848744f76308ab2d0c3aa7ab0 Mon Sep 17 00:00:00 2001 From: Dima77 Date: Sat, 13 Jun 2020 09:09:15 +0300 Subject: [PATCH 07/11] 13-06-2020 one driver go no buy use car --- Lesson_9/SmartPointer/Car.cpp | 2 +- Lesson_9/SmartPointer/CarFactory.h | 1 + Lesson_9/SmartPointer/Driver.cpp | 6 ------ Lesson_9/SmartPointer/Driver.h | 2 -- Lesson_9/SmartPointer/DriverManager.cpp | 16 ++++++++++++---- Lesson_9/SmartPointer/DriverManager.h | 1 - Lesson_9/SmartPointer/SmartPointer.cpp | 10 +++++----- Lesson_9/SmartPointer/autoschool.cpp | 16 ++++++++++++++-- Lesson_9/SmartPointer/autoschool.h | 3 ++- 9 files changed, 35 insertions(+), 22 deletions(-) diff --git a/Lesson_9/SmartPointer/Car.cpp b/Lesson_9/SmartPointer/Car.cpp index fed8e63..73a5593 100644 --- a/Lesson_9/SmartPointer/Car.cpp +++ b/Lesson_9/SmartPointer/Car.cpp @@ -12,4 +12,4 @@ Car::~Car() void Car::Drive() { std::cout << color_ << " car in move\n"; -} +} \ No newline at end of file diff --git a/Lesson_9/SmartPointer/CarFactory.h b/Lesson_9/SmartPointer/CarFactory.h index bf6a71a..d6e31f2 100644 --- a/Lesson_9/SmartPointer/CarFactory.h +++ b/Lesson_9/SmartPointer/CarFactory.h @@ -6,3 +6,4 @@ class CarFactory public: std::unique_ptr BuildCar(const std::string& color); }; + diff --git a/Lesson_9/SmartPointer/Driver.cpp b/Lesson_9/SmartPointer/Driver.cpp index 766c1bc..3bf6295 100644 --- a/Lesson_9/SmartPointer/Driver.cpp +++ b/Lesson_9/SmartPointer/Driver.cpp @@ -36,10 +36,4 @@ void Driver::ShowDriverInfo() { std::cout<< name_<car_ << std::endl; } -void Driver::operator()(std::unique_ptr < Driver> dr) -{ - //Driver* currentD = dr.get(); - dr->Go(); - this->Go(); -} diff --git a/Lesson_9/SmartPointer/Driver.h b/Lesson_9/SmartPointer/Driver.h index cd33871..a5bab1d 100644 --- a/Lesson_9/SmartPointer/Driver.h +++ b/Lesson_9/SmartPointer/Driver.h @@ -11,8 +11,6 @@ class Driver std::unique_ptr SellCar(); void Go(); void ShowDriverInfo(); - void operator()(std::unique_ptr < Driver>); - private: std::unique_ptr car_; std::shared_ptr factory_; diff --git a/Lesson_9/SmartPointer/DriverManager.cpp b/Lesson_9/SmartPointer/DriverManager.cpp index 264dd64..7eb9f99 100644 --- a/Lesson_9/SmartPointer/DriverManager.cpp +++ b/Lesson_9/SmartPointer/DriverManager.cpp @@ -3,12 +3,14 @@ #include "Driver.h" #include "Car.h" #include "DriverManager.h" +#include DriverManager::DriverManager(const std::string& nameManager, std::shared_ptr& factory) : factory_(factory) , nameManager_(nameManager), ManagerDrivers_(0) , OneDriver_(nullptr) { + } void DriverManager::GetOneDriver(std::unique_ptr CurrentDriver) { @@ -17,13 +19,13 @@ void DriverManager::GetOneDriver(std::unique_ptr CurrentDriver) } void DriverManager::ShowOneDriver() { + std::cout << "OneDriver_="<< OneDriver_; OneDriver_->Go(); } void DriverManager::ThreaFunctionManager() { - - int i = 100; + int i = 10; while (i) { OneDriver_->Go(); @@ -33,7 +35,13 @@ void DriverManager::ThreaFunctionManager() } void DriverManager::startThread() { - std::cout << "go! ";//it works! //failed to implement through functor and this line stil doesn't work: - std::thread th_(&ThreaFunctionManager,OneDriver_); + //std::thread th_(&DriverManager::ThreaFunctionManager,this->OneDriver_.get()); + std::thread th(&DriverManager::ThreaFunctionManager, this); + th.detach(); + //do not use "th.join()", otherwise we will stop the main thread... + //..and there will be no parallel execution of threads + //th.join(); + std::cout << "bye!"<> ManagerDrivers_; std::unique_ptr OneDriver_; }; - diff --git a/Lesson_9/SmartPointer/SmartPointer.cpp b/Lesson_9/SmartPointer/SmartPointer.cpp index 02a282b..98c4625 100644 --- a/Lesson_9/SmartPointer/SmartPointer.cpp +++ b/Lesson_9/SmartPointer/SmartPointer.cpp @@ -15,14 +15,14 @@ int main() { - + std::shared_ptr factory(new CarFactory()); autoschool mySchool(10, "Ivan",factory); - std::thread th(&autoschool::threadfuct, &mySchool); - th.join(); + std::thread thp(&autoschool::threadfuct, &mySchool); + + thp.join(); //mySchool.showDrivers(); - mySchool.showDriversofManagers(); - + //mySchool.showDriversofManagers(); /* Driver driver1("Bob", factory); driver1.Go(); diff --git a/Lesson_9/SmartPointer/autoschool.cpp b/Lesson_9/SmartPointer/autoschool.cpp index 4009615..9be5484 100644 --- a/Lesson_9/SmartPointer/autoschool.cpp +++ b/Lesson_9/SmartPointer/autoschool.cpp @@ -10,6 +10,16 @@ autoschool::autoschool(int numbersOfDrivers, std::string name, std::shared_ptr currentDriver(new Driver("Ivan", factory_)); //DriversInAutoschool_.push_back(std::move(currentDriver)); //secondway: same but less code + getName(i); DriversInAutoschool_.push_back(std::make_unique < Driver>(name_, factory_)); //2) Create Managers - inside DriverSchool(autoschool): DriverManagers_.push_back(std::make_unique ("Stepan", factory_)); @@ -28,10 +39,11 @@ void autoschool::threadfuct() { DriverManagers_[i]->GetOneDriver(std::move(std::unique_ptr(DriversInAutoschool_[i].release()))); } - //4)Everybody DriverManager strat Go for his Driver (OneDriver) in thread - for (int i = 0; i < numbersOfDrivers_; i++) + //4)Everybody DriverManager start Go for his Driver (OneDriver) in thread + for (int i = 0; i < numbersOfDrivers_; i++) { DriverManagers_[i]->startThread(); + std::this_thread::sleep_for(std::chrono::milliseconds(2000)); } } diff --git a/Lesson_9/SmartPointer/autoschool.h b/Lesson_9/SmartPointer/autoschool.h index d3a18b1..3e3713b 100644 --- a/Lesson_9/SmartPointer/autoschool.h +++ b/Lesson_9/SmartPointer/autoschool.h @@ -10,7 +10,8 @@ class autoschool void threadfuct(); void showDrivers(); void showDriversofManagers(); - private: + void getName(const int& i); +private: int numbersOfDrivers_; std::string name_; std::shared_ptr factory_; From e82411b6bec5e32531f2069505de55c49d7cb2bf Mon Sep 17 00:00:00 2001 From: Dima77 Date: Tue, 16 Jun 2020 11:25:50 +0300 Subject: [PATCH 08/11] some mistake 16-06-2020 --- Lesson_9/SmartPointer/Car.cpp | 2 +- Lesson_9/SmartPointer/Car.h | 1 + Lesson_9/SmartPointer/CarFactory.cpp | 5 ++- Lesson_9/SmartPointer/CarFactory.h | 1 + Lesson_9/SmartPointer/Driver.cpp | 44 ++++++++++++++++++----- Lesson_9/SmartPointer/Driver.h | 8 ++++- Lesson_9/SmartPointer/DriverManager.cpp | 34 ++++++++++-------- Lesson_9/SmartPointer/DriverManager.h | 7 ++-- Lesson_9/SmartPointer/SmartPointer.cpp | 20 ++--------- Lesson_9/SmartPointer/autoschool.cpp | 46 ++++++++++++++++--------- Lesson_9/SmartPointer/autoschool.h | 12 +++---- Lesson_9/SmartPointer/stdafx.h | 7 ++++ 12 files changed, 117 insertions(+), 70 deletions(-) diff --git a/Lesson_9/SmartPointer/Car.cpp b/Lesson_9/SmartPointer/Car.cpp index 73a5593..44848a4 100644 --- a/Lesson_9/SmartPointer/Car.cpp +++ b/Lesson_9/SmartPointer/Car.cpp @@ -1,7 +1,7 @@ +#pragma once #include "stdafx.h" #include "Car.h" - Car::Car(const std::string& color) : color_(color) { diff --git a/Lesson_9/SmartPointer/Car.h b/Lesson_9/SmartPointer/Car.h index 72b4ebc..6acaff9 100644 --- a/Lesson_9/SmartPointer/Car.h +++ b/Lesson_9/SmartPointer/Car.h @@ -1,5 +1,6 @@ #pragma once + class Car { public: diff --git a/Lesson_9/SmartPointer/CarFactory.cpp b/Lesson_9/SmartPointer/CarFactory.cpp index 6c492b2..8246852 100644 --- a/Lesson_9/SmartPointer/CarFactory.cpp +++ b/Lesson_9/SmartPointer/CarFactory.cpp @@ -1,6 +1,9 @@ +#pragma once #include "stdafx.h" -#include "Car.h" #include "CarFactory.h" +#include "Car.h" + + std::unique_ptr CarFactory::BuildCar(const std::string& color) diff --git a/Lesson_9/SmartPointer/CarFactory.h b/Lesson_9/SmartPointer/CarFactory.h index d6e31f2..f303c58 100644 --- a/Lesson_9/SmartPointer/CarFactory.h +++ b/Lesson_9/SmartPointer/CarFactory.h @@ -1,4 +1,5 @@ #pragma once + #include "Car.h" class CarFactory diff --git a/Lesson_9/SmartPointer/Driver.cpp b/Lesson_9/SmartPointer/Driver.cpp index 3bf6295..550c366 100644 --- a/Lesson_9/SmartPointer/Driver.cpp +++ b/Lesson_9/SmartPointer/Driver.cpp @@ -1,7 +1,13 @@ +#pragma once #include "stdafx.h" +#include "Driver.h" #include "Car.h" #include "CarFactory.h" -#include "Driver.h" + +#include "autoschool.h" + + +std::mutex mtx; Driver::Driver(const std::string& name, std::shared_ptr factory) : factory_(factory) @@ -14,15 +20,18 @@ void Driver::BuyCar(const std::string& color) } void Driver::Go() { + mtx.lock(); if (car_ != nullptr) - { - std::cout << name_ << " I have a car "; - car_->Drive(); - } - else - { - std::cout << name_ << ": I'll go on foot\n"; - } + { + std::cout << name_ << " I have a car "; + car_->Drive(); + } + else + { + std::cout << name_ << ": I'll go on foot\n"; + } + mtx.unlock(); + } void Driver::BuyUsedCar(Driver* d) { @@ -36,4 +45,21 @@ void Driver::ShowDriverInfo() { std::cout<< name_<car_ << std::endl; } +bool Driver::HaveCar() +{ + if (car_ != nullptr) + { + return false; // no car + } + else + { + return true; //have car + } +} +int Driver::isDriverToBuy(autoschool& currentSchool) +{ + currentSchool; // функция для поиска драйвера с машиной + return 1; +} + diff --git a/Lesson_9/SmartPointer/Driver.h b/Lesson_9/SmartPointer/Driver.h index a5bab1d..ffb6900 100644 --- a/Lesson_9/SmartPointer/Driver.h +++ b/Lesson_9/SmartPointer/Driver.h @@ -1,6 +1,9 @@ #pragma once -#include "Car.h" + #include "CarFactory.h" +#include "Car.h" +#include "autoschool.h" + class Driver { @@ -11,9 +14,12 @@ class Driver std::unique_ptr SellCar(); void Go(); void ShowDriverInfo(); + bool HaveCar(); + int isDriverToBuy(autoschool& currentSchool); private: std::unique_ptr car_; std::shared_ptr factory_; std::string name_; + }; diff --git a/Lesson_9/SmartPointer/DriverManager.cpp b/Lesson_9/SmartPointer/DriverManager.cpp index 7eb9f99..46dce59 100644 --- a/Lesson_9/SmartPointer/DriverManager.cpp +++ b/Lesson_9/SmartPointer/DriverManager.cpp @@ -1,13 +1,15 @@ +#pragma once #include "stdafx.h" +#include "DriverManager.h" #include "CarFactory.h" #include "Driver.h" #include "Car.h" -#include "DriverManager.h" -#include +#include "autoschool.h" + DriverManager::DriverManager(const std::string& nameManager, std::shared_ptr& factory) : factory_(factory) - , nameManager_(nameManager), ManagerDrivers_(0) + , nameManager_(nameManager) , OneDriver_(nullptr) { @@ -15,33 +17,35 @@ DriverManager::DriverManager(const std::string& nameManager, std::shared_ptr CurrentDriver) { //OneDriver_ = std::unique_ptr(std::move(CurrentDriver)); - OneDriver_=std::move(CurrentDriver); + DriversOwnedByManagers_.push_back(std::move(CurrentDriver)); + //OneDriver_=std::move(CurrentDriver); } void DriverManager::ShowOneDriver() { - - std::cout << "OneDriver_="<< OneDriver_; - OneDriver_->Go(); + //OneDriver_->Go(); } void DriverManager::ThreaFunctionManager() { - int i = 10; - while (i) - { - OneDriver_->Go(); - std::this_thread::sleep_for(std::chrono::milliseconds(1000)); - i--; - } + //OneDriver_->Go(); + DriversOwnedByManagers_[0]->Go(); + DriversOwnedByManagers_[1]->Go(); + std::this_thread::sleep_for(std::chrono::milliseconds(2000)); } void DriverManager::startThread() { //failed to implement through functor and this line stil doesn't work: //std::thread th_(&DriverManager::ThreaFunctionManager,this->OneDriver_.get()); + std::thread th(&DriverManager::ThreaFunctionManager, this); - th.detach(); + //do not use "th.join()", otherwise we will stop the main thread... //..and there will be no parallel execution of threads //th.join(); std::cout << "bye!"< factory_; - std::vector> ManagerDrivers_; + std::vector> DriversOwnedByManagers_; std::unique_ptr OneDriver_; }; diff --git a/Lesson_9/SmartPointer/SmartPointer.cpp b/Lesson_9/SmartPointer/SmartPointer.cpp index 98c4625..907f7b6 100644 --- a/Lesson_9/SmartPointer/SmartPointer.cpp +++ b/Lesson_9/SmartPointer/SmartPointer.cpp @@ -1,25 +1,15 @@ #include "stdafx.h" #include "Driver.h" -#include "Driver.h" #include "CarFactory.h" #include "Car.h" #include "DriverManager.h" #include "autoschool.h" -//----- -#include -#include -#include -#include -#include -#include int main() { - std::shared_ptr factory(new CarFactory()); - autoschool mySchool(10, "Ivan",factory); + autoschool mySchool(4, "Ivan",factory); std::thread thp(&autoschool::threadfuct, &mySchool); - thp.join(); //mySchool.showDrivers(); //mySchool.showDriversofManagers(); @@ -38,18 +28,14 @@ int main() /* driver1.BuyCar("red"); driver1.Go(); - driver1.BuyCar("blue"); driver1.Go(); - - Driver driver2("Sam", factory); driver2.Go(); - driver2.BuyCar("red"); driver2.Go(); - driver2.BuyCar("blue"); - driver2.Go();*/ + driver2.Go(); + */ return 0; } \ No newline at end of file diff --git a/Lesson_9/SmartPointer/autoschool.cpp b/Lesson_9/SmartPointer/autoschool.cpp index 9be5484..f898401 100644 --- a/Lesson_9/SmartPointer/autoschool.cpp +++ b/Lesson_9/SmartPointer/autoschool.cpp @@ -1,16 +1,19 @@ +#pragma once #include "stdafx.h" #include "autoschool.h" -#include "CarFactory.h" #include "Driver.h" +#include "CarFactory.h" #include "Car.h" #include "DriverManager.h" -autoschool::autoschool(int numbersOfDrivers, std::string name, std::shared_ptr& factory) - :factory_(factory), name_(name), numbersOfDrivers_(numbersOfDrivers) + + +autoschool::autoschool(int numberOfManagers, std::string name, std::shared_ptr& factory) + :factory_(factory), name_(name), numbersOfDrivers_(numberOfManagers*2), numberOfManagers_(numberOfManagers) { DriversInAutoschool_.clear(); } - void autoschool::getName(const int& i) + const void autoschool::getName(const int& i) { if (i == 3) name_ = "Brandon Lee"; @@ -22,43 +25,52 @@ autoschool::autoschool(int numbersOfDrivers, std::string name, std::shared_ptr currentDriver(new Driver("Ivan", factory_)); //DriversInAutoschool_.push_back(std::move(currentDriver)); //secondway: same but less code getName(i); - DriversInAutoschool_.push_back(std::make_unique < Driver>(name_, factory_)); - //2) Create Managers - inside DriverSchool(autoschool): - DriverManagers_.push_back(std::make_unique ("Stepan", factory_)); + DriversInAutoschool_.push_back(std::make_unique(name_, factory_)); } - //3)Give Driver to Manager - one driver - one manager: - for (int i = 0; i < numbersOfDrivers_; i++) + //2) Create Managers - inside DriverSchool(autoschool): + for (int i = 0; i < numberOfManagers_; i++) { - DriverManagers_[i]->GetOneDriver(std::move(std::unique_ptr(DriversInAutoschool_[i].release()))); + DriverManagers_.push_back(DriverManager("Stepan", factory_)); + } + //3)Give Driver to Manager - one manager - two drivers: + int j = 0; + for (int i = 0; i < numberOfManagers_; i++) + { + + DriverManagers_[i].GetOneDriver(std::move(std::unique_ptr(DriversInAutoschool_[j].release()))); + j++; + DriverManagers_[i].GetOneDriver(std::move(std::unique_ptr(DriversInAutoschool_[j].release()))); + j++; + //можно ли было записать сразу несколько элементов типа unique_ptr? Типа вернуть их вектор. Наверное да. } //4)Everybody DriverManager start Go for his Driver (OneDriver) in thread - for (int i = 0; i < numbersOfDrivers_; i++) + for (int i = 0; i < numberOfManagers_; ++i) { - DriverManagers_[i]->startThread(); + DriverManagers_[i].startThread(); std::this_thread::sleep_for(std::chrono::milliseconds(2000)); } } - void autoschool::showDrivers() //use before launch showDriversofManagers() { - for (int i = 0; i < numbersOfDrivers_; i++) + for (int i = 0; i < numbersOfDrivers_; ++i) { DriversInAutoschool_[i]->Go(); } } void autoschool::showDriversofManagers() // use before launch showDrivers() { - for (int i = 0; i < numbersOfDrivers_; i++) + for (int i = 0; i < numberOfManagers_; i++) { std::cout << "Manager" << i + 1 << "has Driver: "; - DriverManagers_[i]->ShowOneDriver(); + DriverManagers_[i].ShowOneDriver(); } } \ No newline at end of file diff --git a/Lesson_9/SmartPointer/autoschool.h b/Lesson_9/SmartPointer/autoschool.h index 3e3713b..726bbab 100644 --- a/Lesson_9/SmartPointer/autoschool.h +++ b/Lesson_9/SmartPointer/autoschool.h @@ -1,8 +1,7 @@ #pragma once -#include "CarFactory.h" -#include "Driver.h" -#include "Car.h" #include "DriverManager.h" +#include "Driver.h" + class autoschool { public: @@ -10,11 +9,12 @@ class autoschool void threadfuct(); void showDrivers(); void showDriversofManagers(); - void getName(const int& i); -private: + const void getName(const int& i); + private: int numbersOfDrivers_; + int numberOfManagers_; std::string name_; std::shared_ptr factory_; std::vector> DriversInAutoschool_; - std::vector> DriverManagers_; + std::vector DriverManagers_; }; \ No newline at end of file diff --git a/Lesson_9/SmartPointer/stdafx.h b/Lesson_9/SmartPointer/stdafx.h index 4024f93..eef48ca 100644 --- a/Lesson_9/SmartPointer/stdafx.h +++ b/Lesson_9/SmartPointer/stdafx.h @@ -5,3 +5,10 @@ #include #include #include +#include +//----- +//#include "Car.h" +//#include "DriverManager.h" +//#include "CarFactory.h" +//#include "autoschool.h" +//#include "Driver.h" From a1a9415ee1476629502ea6301f8b5d4fda5180ff Mon Sep 17 00:00:00 2001 From: Dima77 Date: Thu, 18 Jun 2020 13:38:07 +0300 Subject: [PATCH 09/11] 18-06-2020 doesn't work. Please tell me where mystake is --- Lesson_9/SmartPointer/CarFactory.cpp | 3 - Lesson_9/SmartPointer/Driver.cpp | 84 ++++++++++++++++++------- Lesson_9/SmartPointer/Driver.h | 16 +++-- Lesson_9/SmartPointer/DriverManager.cpp | 52 +++++++++++---- Lesson_9/SmartPointer/DriverManager.h | 10 ++- Lesson_9/SmartPointer/SmartPointer.cpp | 3 +- Lesson_9/SmartPointer/autoschool.cpp | 57 ++++++++++++++--- Lesson_9/SmartPointer/autoschool.h | 7 ++- 8 files changed, 176 insertions(+), 56 deletions(-) diff --git a/Lesson_9/SmartPointer/CarFactory.cpp b/Lesson_9/SmartPointer/CarFactory.cpp index 8246852..2410935 100644 --- a/Lesson_9/SmartPointer/CarFactory.cpp +++ b/Lesson_9/SmartPointer/CarFactory.cpp @@ -3,9 +3,6 @@ #include "CarFactory.h" #include "Car.h" - - - std::unique_ptr CarFactory::BuildCar(const std::string& color) { return std::unique_ptr(new Car(color)); diff --git a/Lesson_9/SmartPointer/Driver.cpp b/Lesson_9/SmartPointer/Driver.cpp index 550c366..f9eeb55 100644 --- a/Lesson_9/SmartPointer/Driver.cpp +++ b/Lesson_9/SmartPointer/Driver.cpp @@ -1,37 +1,33 @@ #pragma once #include "stdafx.h" #include "Driver.h" +#include "DriverManager.h" #include "Car.h" #include "CarFactory.h" - #include "autoschool.h" - - std::mutex mtx; - Driver::Driver(const std::string& name, std::shared_ptr factory) : factory_(factory) - , name_(name) -{ -} + , name_(name), + myManager_(nullptr) +{} void Driver::BuyCar(const std::string& color) { car_ = factory_->BuildCar(color); } void Driver::Go() { - mtx.lock(); + //mtx.lock(); //it was like this before the cleverGo(); if (car_ != nullptr) - { + { std::cout << name_ << " I have a car "; car_->Drive(); - } - else - { + } + else + { std::cout << name_ << ": I'll go on foot\n"; - } - mtx.unlock(); - + } + ///mtx.unlock(); //it was like this before the cleverGo(); } void Driver::BuyUsedCar(Driver* d) { @@ -39,7 +35,7 @@ void Driver::BuyUsedCar(Driver* d) } std::unique_ptr Driver::SellCar() { - return std::unique_ptr (car_.release()); + return std::make_unique (car_.release()); } void Driver::ShowDriverInfo() { @@ -47,7 +43,7 @@ void Driver::ShowDriverInfo() } bool Driver::HaveCar() { - if (car_ != nullptr) + if (car_ == nullptr) { return false; // no car } @@ -56,10 +52,54 @@ bool Driver::HaveCar() return true; //have car } } -int Driver::isDriverToBuy(autoschool& currentSchool) +std::vector Driver::canIbuyUsedCar() { - currentSchool; // функция для поиска драйвера с машиной - return 1; + std::vector temp = myManager_->isDriverToBuyCarFromAllManagers_m(mySchool_); + return temp; } - - +void Driver::rememberMyManager(DriverManager* myM) +{ + this->myManager_ = myM; +} +DriverManager* Driver::sayNameMyManager() +{ + return this->myManager_; +} +void Driver::rememberMySchool(autoschool* myS) +{ + this->mySchool_ = myS; +} +autoschool* Driver::sayNameMySchool() +{ + return this->mySchool_; +} +void Driver::cleverGo() +{ + int i = 100; + while (i) + { + mtx.lock(); + //std::lock_guardlock(mtx); + this->Go(); + bool probaPera = this->HaveCar(); + if (!this->HaveCar()) + { + std::vector temp = this->canIbuyUsedCar(); + int y = temp.empty(); + if (temp.empty())//If temp.empty==1 than meens temp is empty + this->BuyCar("red");//if haven't drivers with car buy new car from factory + else + { + //car_ = std::move(mySchool_->giveUsedCarFromDriversOwnedManagers(temp)); + std::cout << std::endl << "Get Ready!" << std::endl; + //this->BuyUsedCar(); + //line below doesn't work + //car_ = mySchool_->giveUsedCarFromDriversOwnedManagers(temp);//you should work with metods not fields + std::cout << "It works! - to buy car!"; + } + } + mtx.unlock(); + std::this_thread::sleep_for(std::chrono::milliseconds(1000)); + i--; + } +} \ No newline at end of file diff --git a/Lesson_9/SmartPointer/Driver.h b/Lesson_9/SmartPointer/Driver.h index ffb6900..d41a05e 100644 --- a/Lesson_9/SmartPointer/Driver.h +++ b/Lesson_9/SmartPointer/Driver.h @@ -2,8 +2,8 @@ #include "CarFactory.h" #include "Car.h" -#include "autoschool.h" - +class DriverManager; +class autoschool; class Driver { @@ -15,11 +15,19 @@ class Driver void Go(); void ShowDriverInfo(); bool HaveCar(); - int isDriverToBuy(autoschool& currentSchool); -private: + void cleverGo(); + std::vector canIbuyUsedCar(); + std::vector AdviseDriverFromManagerToBuyCar(); + void rememberMyManager(DriverManager* myM); + DriverManager* sayNameMyManager(); + void rememberMySchool(autoschool* myS); + autoschool* sayNameMySchool(); + private: std::unique_ptr car_; std::shared_ptr factory_; std::string name_; + DriverManager* myManager_; + autoschool* mySchool_; }; diff --git a/Lesson_9/SmartPointer/DriverManager.cpp b/Lesson_9/SmartPointer/DriverManager.cpp index 46dce59..127583d 100644 --- a/Lesson_9/SmartPointer/DriverManager.cpp +++ b/Lesson_9/SmartPointer/DriverManager.cpp @@ -6,44 +6,74 @@ #include "Car.h" #include "autoschool.h" +int DriverManager::NumberOfManagers = 0; DriverManager::DriverManager(const std::string& nameManager, std::shared_ptr& factory) : factory_(factory) , nameManager_(nameManager) , OneDriver_(nullptr) { - } void DriverManager::GetOneDriver(std::unique_ptr CurrentDriver) { //OneDriver_ = std::unique_ptr(std::move(CurrentDriver)); - DriversOwnedByManagers_.push_back(std::move(CurrentDriver)); + DriversOwnedByManagers_.push_back(std::move(CurrentDriver));// + //CurrentDriver->rememberMyManager(this); //OneDriver_=std::move(CurrentDriver); } void DriverManager::ShowOneDriver() { //OneDriver_->Go(); } -void DriverManager::ThreaFunctionManager() +void DriverManager::ThreaFunctionManager()//previous version { //OneDriver_->Go(); - DriversOwnedByManagers_[0]->Go(); - DriversOwnedByManagers_[1]->Go(); + DriversOwnedByManagers_[0]->cleverGo(); + DriversOwnedByManagers_[1]->cleverGo(); std::this_thread::sleep_for(std::chrono::milliseconds(2000)); } void DriverManager::startThread() { - //failed to implement through functor and this line stil doesn't work: - //std::thread th_(&DriverManager::ThreaFunctionManager,this->OneDriver_.get()); - std::thread th(&DriverManager::ThreaFunctionManager, this); - + //do not use "th.join()", otherwise we will stop the main thread... //..and there will be no parallel execution of threads //th.join(); - std::cout << "bye!"< DriverManager::isDriverToBuyCarFromAllManagers_m(autoschool* currentSchool) +{ + std::vector temp = currentSchool->isDriverToBuy_as(); + bool r=temp.empty(); + return temp; +} +int DriverManager::isDriverToBuyCarFromMe_m() +{ + bool g0 = DriversOwnedByManagers_[0]->HaveCar(); + bool g1 = DriversOwnedByManagers_[0]->HaveCar(); + if (DriversOwnedByManagers_[0]->HaveCar()) + { + return 1;//first Driver + } + else if (DriversOwnedByManagers_[1]->HaveCar()) + { + return 2;//second Driver + } + else + return 0;//if drivers of Manager haven't car +} +void DriverManager::setFiledManagerToOnedDrivers(int k) +{ + DriversOwnedByManagers_[k]->rememberMyManager(this); +} +std::unique_ptr DriverManager::tellDriverTosellCar(int index) +{ + //return std::make_unique(DriversOwnedByManagers_[index]->SellCar()); + std::cout << "In DriverManager"; + //return std::make_unique(DriversOwnedByManagers_[index]->SellCar().release()); + return DriversOwnedByManagers_[index]->SellCar(); } diff --git a/Lesson_9/SmartPointer/DriverManager.h b/Lesson_9/SmartPointer/DriverManager.h index dc0c0e8..7214e1f 100644 --- a/Lesson_9/SmartPointer/DriverManager.h +++ b/Lesson_9/SmartPointer/DriverManager.h @@ -1,6 +1,6 @@ #pragma once #include "Driver.h" - +class autoschool; class DriverManager { @@ -10,10 +10,14 @@ class DriverManager void ShowOneDriver(); void startThread(); void ThreaFunctionManager(); - //void AdviceDriverToBuyCar(autoschool& CurrentSchool); + std::vector isDriverToBuyCarFromAllManagers_m(autoschool* currentSchool); + int isDriverToBuyCarFromMe_m(); + void setFiledManagerToOnedDrivers(int k); + std::unique_ptr tellDriverTosellCar(int index); private: std::string nameManager_; std::shared_ptr factory_; std::vector> DriversOwnedByManagers_; - std::unique_ptr OneDriver_; + std::unique_ptr OneDriver_;//artefact + static int NumberOfManagers; }; diff --git a/Lesson_9/SmartPointer/SmartPointer.cpp b/Lesson_9/SmartPointer/SmartPointer.cpp index 907f7b6..faee52a 100644 --- a/Lesson_9/SmartPointer/SmartPointer.cpp +++ b/Lesson_9/SmartPointer/SmartPointer.cpp @@ -8,9 +8,10 @@ int main() { std::shared_ptr factory(new CarFactory()); - autoschool mySchool(4, "Ivan",factory); + autoschool mySchool(2, 2, "Ivan",factory); std::thread thp(&autoschool::threadfuct, &mySchool); thp.join(); + //mySchool.showDrivers(); //mySchool.showDriversofManagers(); /* diff --git a/Lesson_9/SmartPointer/autoschool.cpp b/Lesson_9/SmartPointer/autoschool.cpp index f898401..aeb5da8 100644 --- a/Lesson_9/SmartPointer/autoschool.cpp +++ b/Lesson_9/SmartPointer/autoschool.cpp @@ -8,19 +8,22 @@ -autoschool::autoschool(int numberOfManagers, std::string name, std::shared_ptr& factory) - :factory_(factory), name_(name), numbersOfDrivers_(numberOfManagers*2), numberOfManagers_(numberOfManagers) +autoschool::autoschool(int numberOfManagers, int numberOfDriversInOwnedByOneManager, std::string name, std::shared_ptr& factory) + :factory_(factory), name_(name), numbersOfDrivers_(numberOfManagers*2), numberOfManagers_(numberOfManagers), + numberOfDriversInOwnedByOneManager_(numberOfDriversInOwnedByOneManager) // dont use for now... { DriversInAutoschool_.clear(); } const void autoschool::getName(const int& i) { - if (i == 3) - name_ = "Brandon Lee"; - else if (i == 2) - name_ = "Bruce Lee"; + if (i == 0) + name_ = "1 - one"; else if (i == 1) - name_ = "Jackie Chan"; + name_ = "2 - two"; + else if (i == 2) + name_ = "3 - three"; + else if (i == 4) + name_ = "4 - four"; else name_ = "Arnold Schwarzenegger"; } void autoschool::threadfuct() @@ -35,6 +38,7 @@ void autoschool::threadfuct() //secondway: same but less code getName(i); DriversInAutoschool_.push_back(std::make_unique(name_, factory_)); + DriversInAutoschool_[i]->rememberMySchool(this); } //2) Create Managers - inside DriverSchool(autoschool): for (int i = 0; i < numberOfManagers_; i++) @@ -48,11 +52,12 @@ void autoschool::threadfuct() DriverManagers_[i].GetOneDriver(std::move(std::unique_ptr(DriversInAutoschool_[j].release()))); j++; + DriverManagers_[i].setFiledManagerToOnedDrivers(0); DriverManagers_[i].GetOneDriver(std::move(std::unique_ptr(DriversInAutoschool_[j].release()))); + DriverManagers_[i].setFiledManagerToOnedDrivers(1); j++; - //можно ли было записать сразу несколько элементов типа unique_ptr? Типа вернуть их вектор. Наверное да. } - //4)Everybody DriverManager start Go for his Driver (OneDriver) in thread + //4)Everybody DriverManager start Go for his two Drivers in thread for (int i = 0; i < numberOfManagers_; ++i) { DriverManagers_[i].startThread(); @@ -73,4 +78,36 @@ void autoschool::showDriversofManagers() // use before launch showDrivers() std::cout << "Manager" << i + 1 << "has Driver: "; DriverManagers_[i].ShowOneDriver(); } -} \ No newline at end of file +} +std::vector autoschool::isDriverToBuy_as() +{ + std::vector tempManagerAndDriver; // first number - Manager Number, second number - Driver number in "DriversOwnedByManagers_" + int i; + tempManagerAndDriver.clear(); + for (i=0;i autoschool::giveUsedCarFromDriversOwnedManagers(std::vector CoordinatesOfDriverHasCar) +{ + //this->DriverManagers_[CoordinatesOfDriverHasCar[0]].tellDriverTosellCar(CoordinatesOfDriverHasCar[1]); + //return std::move(std::make_unique("Ivan", factory_)); + //return std::make_unique(this->DriverManagers_[CoordinatesOfDriverHasCar[0]].tellDriverTosellCar(CoordinatesOfDriverHasCar[1]).release()); + return this->DriverManagers_[CoordinatesOfDriverHasCar[0]].tellDriverTosellCar(CoordinatesOfDriverHasCar[1]); +} diff --git a/Lesson_9/SmartPointer/autoschool.h b/Lesson_9/SmartPointer/autoschool.h index 726bbab..2c14aec 100644 --- a/Lesson_9/SmartPointer/autoschool.h +++ b/Lesson_9/SmartPointer/autoschool.h @@ -5,16 +5,19 @@ class autoschool { public: - autoschool(int numbersOfDrivers, std::string name, std::shared_ptr& factory); + autoschool(int numbersOfDrivers, int numberOfDriversInOwnedByOneManager, std::string name, std::shared_ptr& factory); void threadfuct(); void showDrivers(); void showDriversofManagers(); const void getName(const int& i); + std::vector isDriverToBuy_as(); + std::unique_ptr giveUsedCarFromDriversOwnedManagers (std::vector CoordinatesOfDriverHasCar); private: int numbersOfDrivers_; int numberOfManagers_; + int numberOfDriversInOwnedByOneManager_;//пока не задействовал std::string name_; std::shared_ptr factory_; std::vector> DriversInAutoschool_; std::vector DriverManagers_; -}; \ No newline at end of file + }; \ No newline at end of file From 7e27bd93adac6e0b5418f7dcda2a35d4df6bc6e6 Mon Sep 17 00:00:00 2001 From: Dima77 Date: Sun, 21 Jun 2020 20:13:18 +0300 Subject: [PATCH 10/11] DriverSchool - done. 21-06-2020 --- Lesson_9/SmartPointer/Car.cpp | 2 +- Lesson_9/SmartPointer/Car.h | 1 + Lesson_9/SmartPointer/Driver.cpp | 126 +++++++++++++----------- Lesson_9/SmartPointer/Driver.h | 9 +- Lesson_9/SmartPointer/DriverManager.cpp | 80 +++++++-------- Lesson_9/SmartPointer/DriverManager.h | 15 ++- Lesson_9/SmartPointer/SmartPointer.cpp | 30 +----- Lesson_9/SmartPointer/autoschool.cpp | 111 ++++----------------- Lesson_9/SmartPointer/autoschool.h | 14 +-- Lesson_9/SmartPointer/stdafx.h | 11 +-- 10 files changed, 146 insertions(+), 253 deletions(-) diff --git a/Lesson_9/SmartPointer/Car.cpp b/Lesson_9/SmartPointer/Car.cpp index 44848a4..fa47515 100644 --- a/Lesson_9/SmartPointer/Car.cpp +++ b/Lesson_9/SmartPointer/Car.cpp @@ -11,5 +11,5 @@ Car::~Car() { std::cout << color_ << " car has been destroied\n"; } void Car::Drive() { - std::cout << color_ << " car in move\n"; + std::cout << ": "<< color_ << " car in move\n\n"; } \ No newline at end of file diff --git a/Lesson_9/SmartPointer/Car.h b/Lesson_9/SmartPointer/Car.h index 6acaff9..697908a 100644 --- a/Lesson_9/SmartPointer/Car.h +++ b/Lesson_9/SmartPointer/Car.h @@ -7,6 +7,7 @@ class Car Car(const std::string& color); ~Car(); void Drive(); + void GetCarColor(); private: std::string color_; }; diff --git a/Lesson_9/SmartPointer/Driver.cpp b/Lesson_9/SmartPointer/Driver.cpp index f9eeb55..cebac62 100644 --- a/Lesson_9/SmartPointer/Driver.cpp +++ b/Lesson_9/SmartPointer/Driver.cpp @@ -5,57 +5,85 @@ #include "Car.h" #include "CarFactory.h" #include "autoschool.h" + std::mutex mtx; Driver::Driver(const std::string& name, std::shared_ptr factory) : factory_(factory) - , name_(name), - myManager_(nullptr) + , name_(name) {} void Driver::BuyCar(const std::string& color) { car_ = factory_->BuildCar(color); + std::cout << "I bought a new car\n"; + myManager_->GetPtrDriverWithCar(this); } -void Driver::Go() + +void Driver::cleverGo() { - //mtx.lock(); //it was like this before the cleverGo(); - if (car_ != nullptr) + //int whatToDo = rand() % 3 + 1;//dont work with threads + std::random_device rd; + std::mt19937 gen(rd()); + std::uniform_int_distribution<> distrib(1, 2); + int random_number = distrib(gen); + std::lock_guard locked(mtx); + if (car_ != nullptr) //if driver has car - drive { - std::cout << name_ << " I have a car "; - car_->Drive(); + std::cout << name_ << " have a car"; + car_->Drive(); + std::this_thread::sleep_for(std::chrono::milliseconds(2000)); } else { - std::cout << name_ << ": I'll go on foot\n"; + std::cout << name_ << "'ll go on foot.... BUT...."; + switch (random_number) + { + case 1: //buy a new car + { + this->BuyCar(this->SetCarColor()); + this->Go(); + break; + } + case 2://try to buy used car + { + try + { + Driver* p_driverWithCar = myManager_->GivePtrDriverWithCar(); + this->BuyUsedCar(p_driverWithCar); + //this->BuyUsedCar(myManager_->GivePtrDriverWithCar()); //same as the two lines above + } + catch (const std::runtime_error& e) + { + std::cout << e.what(); + } + break; + } + + } } - ///mtx.unlock(); //it was like this before the cleverGo(); -} -void Driver::BuyUsedCar(Driver* d) -{ - car_ = d->SellCar(); -} -std::unique_ptr Driver::SellCar() -{ - return std::make_unique (car_.release()); -} -void Driver::ShowDriverInfo() -{ - std::cout<< name_<car_ << std::endl; } -bool Driver::HaveCar() +void Driver::Go()//already dont use in prog { - if (car_ == nullptr) + //std::lock_guard locked(mtx); + if (car_ != nullptr) { - return false; // no car + std::cout << name_ << " have a car"; + car_->Drive(); + std::this_thread::sleep_for(std::chrono::milliseconds(2000)); } else { - return true; //have car + std::cout << name_ << " : I'll go on foot\n"; } } -std::vector Driver::canIbuyUsedCar() +void Driver::BuyUsedCar(Driver* d) { - std::vector temp = myManager_->isDriverToBuyCarFromAllManagers_m(mySchool_); - return temp; + car_ = d->SellCar(); + std::cout << "I bought a used car\n"; + myManager_->GetPtrDriverWithCar(this); +} +std::unique_ptr Driver::SellCar() +{ + return std::unique_ptr (car_.release()); } void Driver::rememberMyManager(DriverManager* myM) { @@ -73,33 +101,19 @@ autoschool* Driver::sayNameMySchool() { return this->mySchool_; } -void Driver::cleverGo() +Driver* Driver::giveDriverToBuyCar() { - int i = 100; - while (i) - { - mtx.lock(); - //std::lock_guardlock(mtx); - this->Go(); - bool probaPera = this->HaveCar(); - if (!this->HaveCar()) - { - std::vector temp = this->canIbuyUsedCar(); - int y = temp.empty(); - if (temp.empty())//If temp.empty==1 than meens temp is empty - this->BuyCar("red");//if haven't drivers with car buy new car from factory - else - { - //car_ = std::move(mySchool_->giveUsedCarFromDriversOwnedManagers(temp)); - std::cout << std::endl << "Get Ready!" << std::endl; - //this->BuyUsedCar(); - //line below doesn't work - //car_ = mySchool_->giveUsedCarFromDriversOwnedManagers(temp);//you should work with metods not fields - std::cout << "It works! - to buy car!"; - } - } - mtx.unlock(); - std::this_thread::sleep_for(std::chrono::milliseconds(1000)); - i--; - } + return myManager_->GivePtrDriverWithCar(); +} +std::string Driver::SetCarColor() +{ + if (name_ == "Sergey") + return "green"; + else if (name_ == "Ivan") + return "blue"; + else if (name_ == "Sasha") + return "black"; + else if (name_ == "Masha") + return "red"; + else return "silver"; } \ No newline at end of file diff --git a/Lesson_9/SmartPointer/Driver.h b/Lesson_9/SmartPointer/Driver.h index d41a05e..42f1f93 100644 --- a/Lesson_9/SmartPointer/Driver.h +++ b/Lesson_9/SmartPointer/Driver.h @@ -13,21 +13,20 @@ class Driver void BuyUsedCar(Driver* d); std::unique_ptr SellCar(); void Go(); - void ShowDriverInfo(); - bool HaveCar(); void cleverGo(); std::vector canIbuyUsedCar(); - std::vector AdviseDriverFromManagerToBuyCar(); void rememberMyManager(DriverManager* myM); DriverManager* sayNameMyManager(); void rememberMySchool(autoschool* myS); autoschool* sayNameMySchool(); - private: + Driver* giveDriverToBuyCar(); + std::string SetCarColor(); + int intRand(const int& min, const int& max); +private: std::unique_ptr car_; std::shared_ptr factory_; std::string name_; DriverManager* myManager_; autoschool* mySchool_; - }; diff --git a/Lesson_9/SmartPointer/DriverManager.cpp b/Lesson_9/SmartPointer/DriverManager.cpp index 127583d..426f4ac 100644 --- a/Lesson_9/SmartPointer/DriverManager.cpp +++ b/Lesson_9/SmartPointer/DriverManager.cpp @@ -5,77 +5,65 @@ #include "Driver.h" #include "Car.h" #include "autoschool.h" - int DriverManager::NumberOfManagers = 0; DriverManager::DriverManager(const std::string& nameManager, std::shared_ptr& factory) : factory_(factory) , nameManager_(nameManager) - , OneDriver_(nullptr) { } void DriverManager::GetOneDriver(std::unique_ptr CurrentDriver) { - //OneDriver_ = std::unique_ptr(std::move(CurrentDriver)); - DriversOwnedByManagers_.push_back(std::move(CurrentDriver));// - //CurrentDriver->rememberMyManager(this); - //OneDriver_=std::move(CurrentDriver); -} -void DriverManager::ShowOneDriver() -{ - //OneDriver_->Go(); + DriversOwnedByManagers_.push_back(std::move(CurrentDriver)); } -void DriverManager::ThreaFunctionManager()//previous version +void DriverManager::ThreaFunctionManager(int DriverNumber) { - //OneDriver_->Go(); - DriversOwnedByManagers_[0]->cleverGo(); - DriversOwnedByManagers_[1]->cleverGo(); - std::this_thread::sleep_for(std::chrono::milliseconds(2000)); + + int i = 4; + while (i) + { + DriversOwnedByManagers_[DriverNumber]->cleverGo(); + std::this_thread::sleep_for(std::chrono::milliseconds(4000)); + i--; + } } void DriverManager::startThread() { - std::thread th(&DriverManager::ThreaFunctionManager, this); - - //do not use "th.join()", otherwise we will stop the main thread... - //..and there will be no parallel execution of threads - //th.join(); - std::cout << "now we here!"< DriverManager::isDriverToBuyCarFromAllManagers_m(autoschool* currentSchool) -{ - std::vector temp = currentSchool->isDriverToBuy_as(); - bool r=temp.empty(); - return temp; -} -int DriverManager::isDriverToBuyCarFromMe_m() -{ - bool g0 = DriversOwnedByManagers_[0]->HaveCar(); - bool g1 = DriversOwnedByManagers_[0]->HaveCar(); - if (DriversOwnedByManagers_[0]->HaveCar()) + + std::vector threads; + for (unsigned currentDriverNumber = 0; currentDriverNumber < DriversOwnedByManagers_.size(); ++currentDriverNumber) { - return 1;//first Driver + std::random_device rd; + std::mt19937 gen(rd()); + std::uniform_int_distribution<> distrib(1, 3); + distrib(gen); + threads.push_back(std::thread(&DriverManager::ThreaFunctionManager, this, currentDriverNumber)); + std::this_thread::sleep_for(std::chrono::milliseconds(1000)); } - else if (DriversOwnedByManagers_[1]->HaveCar()) + for (auto& t : threads) { - return 2;//second Driver + t.join(); } - else - return 0;//if drivers of Manager haven't car } -void DriverManager::setFiledManagerToOnedDrivers(int k) +void DriverManager::setFieldManagerToOnedDrivers(int k) { DriversOwnedByManagers_[k]->rememberMyManager(this); } -std::unique_ptr DriverManager::tellDriverTosellCar(int index) +void DriverManager::GetPtrDriverWithCar(Driver* NewDriverWhitCar) { - //return std::make_unique(DriversOwnedByManagers_[index]->SellCar()); - std::cout << "In DriverManager"; - //return std::make_unique(DriversOwnedByManagers_[index]->SellCar().release()); - return DriversOwnedByManagers_[index]->SellCar(); + PtrDriversWithCar_.push_back(NewDriverWhitCar); +} +Driver* DriverManager::GivePtrDriverWithCar() +{ + if (PtrDriversWithCar_.empty()) + { + throw std::runtime_error ("...tried to buy a used car but they aren’t\n"); + } + Driver* p_DriverWithCar = PtrDriversWithCar_.back(); + PtrDriversWithCar_.pop_back(); + return p_DriverWithCar; } - diff --git a/Lesson_9/SmartPointer/DriverManager.h b/Lesson_9/SmartPointer/DriverManager.h index 7214e1f..444136e 100644 --- a/Lesson_9/SmartPointer/DriverManager.h +++ b/Lesson_9/SmartPointer/DriverManager.h @@ -7,17 +7,16 @@ class DriverManager public: DriverManager(const std::string& nameManager, std::shared_ptr& factory); void GetOneDriver(std::unique_ptr CurrentDriver); - void ShowOneDriver(); void startThread(); - void ThreaFunctionManager(); - std::vector isDriverToBuyCarFromAllManagers_m(autoschool* currentSchool); - int isDriverToBuyCarFromMe_m(); - void setFiledManagerToOnedDrivers(int k); - std::unique_ptr tellDriverTosellCar(int index); + void ThreaFunctionManager(int DriverNumber); + void setFieldManagerToOnedDrivers(int k); + void GetPtrDriverWithCar(Driver* NewDriverWhitCar); + Driver* GivePtrDriverWithCar(); + private: std::string nameManager_; std::shared_ptr factory_; std::vector> DriversOwnedByManagers_; - std::unique_ptr OneDriver_;//artefact - static int NumberOfManagers; + static int NumberOfManagers;//TODO подумать что с этим решить + std::vector PtrDriversWithCar_; }; diff --git a/Lesson_9/SmartPointer/SmartPointer.cpp b/Lesson_9/SmartPointer/SmartPointer.cpp index faee52a..4092574 100644 --- a/Lesson_9/SmartPointer/SmartPointer.cpp +++ b/Lesson_9/SmartPointer/SmartPointer.cpp @@ -7,36 +7,10 @@ int main() { + std::shared_ptr factory(new CarFactory()); - autoschool mySchool(2, 2, "Ivan",factory); + autoschool mySchool(5, 2, "Ivan",factory); std::thread thp(&autoschool::threadfuct, &mySchool); thp.join(); - - //mySchool.showDrivers(); - //mySchool.showDriversofManagers(); - /* - Driver driver1("Bob", factory); - driver1.Go(); - driver1.BuyCar("red"); - driver1.Go(); - driver1.SellCar(); - driver1.Go(); - driver1.BuyCar("green"); - Driver driver2("Jim", factory); - driver2.Go(); - driver2.BuyUsedCar(&driver1); - driver2.Go(); - /* - driver1.BuyCar("red"); - driver1.Go(); - driver1.BuyCar("blue"); - driver1.Go(); - Driver driver2("Sam", factory); - driver2.Go(); - driver2.BuyCar("red"); - driver2.Go(); - driver2.BuyCar("blue"); - driver2.Go(); - */ return 0; } \ No newline at end of file diff --git a/Lesson_9/SmartPointer/autoschool.cpp b/Lesson_9/SmartPointer/autoschool.cpp index aeb5da8..0632424 100644 --- a/Lesson_9/SmartPointer/autoschool.cpp +++ b/Lesson_9/SmartPointer/autoschool.cpp @@ -6,108 +6,33 @@ #include "Car.h" #include "DriverManager.h" - - -autoschool::autoschool(int numberOfManagers, int numberOfDriversInOwnedByOneManager, std::string name, std::shared_ptr& factory) - :factory_(factory), name_(name), numbersOfDrivers_(numberOfManagers*2), numberOfManagers_(numberOfManagers), - numberOfDriversInOwnedByOneManager_(numberOfDriversInOwnedByOneManager) // dont use for now... -{ - DriversInAutoschool_.clear(); -} +autoschool::autoschool(int numbersOfDrivers, int numberOfDriversInOwnedByOneManager, std::string name, std::shared_ptr& factory) + :factory_(factory), name_(name), numbersOfDrivers_(numbersOfDrivers), Manager_("stepan", factory_) +{} const void autoschool::getName(const int& i) { if (i == 0) - name_ = "1 - one"; + name_ = "Sergey"; else if (i == 1) - name_ = "2 - two"; + name_ = "Ivan"; else if (i == 2) - name_ = "3 - three"; + name_ = "Sasha"; else if (i == 4) - name_ = "4 - four"; - else name_ = "Arnold Schwarzenegger"; - } -void autoschool::threadfuct() -{ - //1) create Drivers: - for (int i = 0; i < numbersOfDrivers_; i++) - { - - //one way: - //std::unique_ptr < Driver> currentDriver(new Driver("Ivan", factory_)); - //DriversInAutoschool_.push_back(std::move(currentDriver)); - //secondway: same but less code - getName(i); - DriversInAutoschool_.push_back(std::make_unique(name_, factory_)); - DriversInAutoschool_[i]->rememberMySchool(this); + name_ = "Masha"; + else name_ = "Pasha"; } - //2) Create Managers - inside DriverSchool(autoschool): - for (int i = 0; i < numberOfManagers_; i++) + void autoschool::threadfuct() { - DriverManagers_.push_back(DriverManager("Stepan", factory_)); - } - //3)Give Driver to Manager - one manager - two drivers: - int j = 0; - for (int i = 0; i < numberOfManagers_; i++) - { - - DriverManagers_[i].GetOneDriver(std::move(std::unique_ptr(DriversInAutoschool_[j].release()))); - j++; - DriverManagers_[i].setFiledManagerToOnedDrivers(0); - DriverManagers_[i].GetOneDriver(std::move(std::unique_ptr(DriversInAutoschool_[j].release()))); - DriverManagers_[i].setFiledManagerToOnedDrivers(1); - j++; - } - //4)Everybody DriverManager start Go for his two Drivers in thread - for (int i = 0; i < numberOfManagers_; ++i) - { - DriverManagers_[i].startThread(); - std::this_thread::sleep_for(std::chrono::milliseconds(2000)); - } -} -void autoschool::showDrivers() //use before launch showDriversofManagers() -{ - for (int i = 0; i < numbersOfDrivers_; ++i) - { - DriversInAutoschool_[i]->Go(); - } -} -void autoschool::showDriversofManagers() // use before launch showDrivers() -{ - for (int i = 0; i < numberOfManagers_; i++) - { - std::cout << "Manager" << i + 1 << "has Driver: "; - DriverManagers_[i].ShowOneDriver(); - } -} -std::vector autoschool::isDriverToBuy_as() -{ - std::vector tempManagerAndDriver; // first number - Manager Number, second number - Driver number in "DriversOwnedByManagers_" - int i; - tempManagerAndDriver.clear(); - for (i=0;i(name_, factory_)); + DriversInAutoschool_[i]->rememberMySchool(this);//TODO зачем ему знать школу?! скорее это не требуется } - if (DriverManagers_[i].isDriverToBuyCarFromMe_m() == 2) + for (int i = 0; i < numbersOfDrivers_; i++) //2)Give all Drivers to one Manager: { - tempManagerAndDriver.push_back(i);//number of Manager - tempManagerAndDriver.push_back(1);//number of Driver owned by Manager - return tempManagerAndDriver; + Manager_.GetOneDriver(std::move(std::unique_ptr(DriversInAutoschool_[i].release()))); + Manager_.setFieldManagerToOnedDrivers(i); } - } - bool h = tempManagerAndDriver.empty();//артефакт - return tempManagerAndDriver; -} - -std::unique_ptr autoschool::giveUsedCarFromDriversOwnedManagers(std::vector CoordinatesOfDriverHasCar) -{ - //this->DriverManagers_[CoordinatesOfDriverHasCar[0]].tellDriverTosellCar(CoordinatesOfDriverHasCar[1]); - //return std::move(std::make_unique("Ivan", factory_)); - //return std::make_unique(this->DriverManagers_[CoordinatesOfDriverHasCar[0]].tellDriverTosellCar(CoordinatesOfDriverHasCar[1]).release()); - return this->DriverManagers_[CoordinatesOfDriverHasCar[0]].tellDriverTosellCar(CoordinatesOfDriverHasCar[1]); -} + Manager_.startThread();//3) run manager method + } \ No newline at end of file diff --git a/Lesson_9/SmartPointer/autoschool.h b/Lesson_9/SmartPointer/autoschool.h index 2c14aec..3aadb51 100644 --- a/Lesson_9/SmartPointer/autoschool.h +++ b/Lesson_9/SmartPointer/autoschool.h @@ -7,17 +7,11 @@ class autoschool public: autoschool(int numbersOfDrivers, int numberOfDriversInOwnedByOneManager, std::string name, std::shared_ptr& factory); void threadfuct(); - void showDrivers(); - void showDriversofManagers(); const void getName(const int& i); - std::vector isDriverToBuy_as(); - std::unique_ptr giveUsedCarFromDriversOwnedManagers (std::vector CoordinatesOfDriverHasCar); - private: - int numbersOfDrivers_; - int numberOfManagers_; - int numberOfDriversInOwnedByOneManager_;//пока не задействовал +private: std::string name_; + int numbersOfDrivers_; std::shared_ptr factory_; std::vector> DriversInAutoschool_; - std::vector DriverManagers_; - }; \ No newline at end of file + DriverManager Manager_; +}; \ No newline at end of file diff --git a/Lesson_9/SmartPointer/stdafx.h b/Lesson_9/SmartPointer/stdafx.h index eef48ca..9476eff 100644 --- a/Lesson_9/SmartPointer/stdafx.h +++ b/Lesson_9/SmartPointer/stdafx.h @@ -6,9 +6,8 @@ #include #include #include -//----- -//#include "Car.h" -//#include "DriverManager.h" -//#include "CarFactory.h" -//#include "autoschool.h" -//#include "Driver.h" +#include +#include +//#include +//#include + From 3270dd24fcc9561b95184b824dab1464515a9142 Mon Sep 17 00:00:00 2001 From: Dima77 Date: Mon, 22 Jun 2020 16:54:43 +0300 Subject: [PATCH 11/11] 22-06-2020 after Denis comments --- Lesson_9/SmartPointer/Car.cpp | 2 +- Lesson_9/SmartPointer/CarFactory.cpp | 2 +- Lesson_9/SmartPointer/Driver.cpp | 23 +++++------------------ Lesson_9/SmartPointer/DriverManager.cpp | 11 ++++------- 4 files changed, 11 insertions(+), 27 deletions(-) diff --git a/Lesson_9/SmartPointer/Car.cpp b/Lesson_9/SmartPointer/Car.cpp index fa47515..e28d8e4 100644 --- a/Lesson_9/SmartPointer/Car.cpp +++ b/Lesson_9/SmartPointer/Car.cpp @@ -1,4 +1,4 @@ -#pragma once + #include "stdafx.h" #include "Car.h" diff --git a/Lesson_9/SmartPointer/CarFactory.cpp b/Lesson_9/SmartPointer/CarFactory.cpp index 2410935..61bcfcb 100644 --- a/Lesson_9/SmartPointer/CarFactory.cpp +++ b/Lesson_9/SmartPointer/CarFactory.cpp @@ -1,4 +1,4 @@ -#pragma once + #include "stdafx.h" #include "CarFactory.h" #include "Car.h" diff --git a/Lesson_9/SmartPointer/Driver.cpp b/Lesson_9/SmartPointer/Driver.cpp index cebac62..c26a2c8 100644 --- a/Lesson_9/SmartPointer/Driver.cpp +++ b/Lesson_9/SmartPointer/Driver.cpp @@ -1,4 +1,4 @@ -#pragma once + #include "stdafx.h" #include "Driver.h" #include "DriverManager.h" @@ -6,7 +6,7 @@ #include "CarFactory.h" #include "autoschool.h" -std::mutex mtx; + Driver::Driver(const std::string& name, std::shared_ptr factory) : factory_(factory) , name_(name) @@ -25,7 +25,7 @@ void Driver::cleverGo() std::mt19937 gen(rd()); std::uniform_int_distribution<> distrib(1, 2); int random_number = distrib(gen); - std::lock_guard locked(mtx); + if (car_ != nullptr) //if driver has car - drive { std::cout << name_ << " have a car"; @@ -40,7 +40,8 @@ void Driver::cleverGo() case 1: //buy a new car { this->BuyCar(this->SetCarColor()); - this->Go(); + std::cout << name_ << " have a car"; + car_->Drive(); break; } case 2://try to buy used car @@ -61,20 +62,6 @@ void Driver::cleverGo() } } } -void Driver::Go()//already dont use in prog -{ - //std::lock_guard locked(mtx); - if (car_ != nullptr) - { - std::cout << name_ << " have a car"; - car_->Drive(); - std::this_thread::sleep_for(std::chrono::milliseconds(2000)); - } - else - { - std::cout << name_ << " : I'll go on foot\n"; - } -} void Driver::BuyUsedCar(Driver* d) { car_ = d->SellCar(); diff --git a/Lesson_9/SmartPointer/DriverManager.cpp b/Lesson_9/SmartPointer/DriverManager.cpp index 426f4ac..790bc1a 100644 --- a/Lesson_9/SmartPointer/DriverManager.cpp +++ b/Lesson_9/SmartPointer/DriverManager.cpp @@ -1,4 +1,4 @@ -#pragma once + #include "stdafx.h" #include "DriverManager.h" #include "CarFactory.h" @@ -29,15 +29,9 @@ void DriverManager::ThreaFunctionManager(int DriverNumber) } void DriverManager::startThread() { - - std::vector threads; for (unsigned currentDriverNumber = 0; currentDriverNumber < DriversOwnedByManagers_.size(); ++currentDriverNumber) { - std::random_device rd; - std::mt19937 gen(rd()); - std::uniform_int_distribution<> distrib(1, 3); - distrib(gen); threads.push_back(std::thread(&DriverManager::ThreaFunctionManager, this, currentDriverNumber)); std::this_thread::sleep_for(std::chrono::milliseconds(1000)); } @@ -50,12 +44,15 @@ void DriverManager::setFieldManagerToOnedDrivers(int k) { DriversOwnedByManagers_[k]->rememberMyManager(this); } +std::mutex mtx; void DriverManager::GetPtrDriverWithCar(Driver* NewDriverWhitCar) { + std::lock_guard locked(mtx); PtrDriversWithCar_.push_back(NewDriverWhitCar); } Driver* DriverManager::GivePtrDriverWithCar() { + std::lock_guard locked(mtx); if (PtrDriversWithCar_.empty()) { throw std::runtime_error ("...tried to buy a used car but they aren’t\n");