Мулти-треадинг - Мегадет задача
Пробвах да го разпиша с класове за вратата и човека, но имам проблем със създаването на нишката с функция на Човека.
https://github.com/iozzilina/CppHW/blob/master/MegadeathSource.cpp
Някой да подскаже?
Пробвах да го разпиша с класове за вратата и човека, но имам проблем със създаването на нишката с функция на Човека.
https://github.com/iozzilina/CppHW/blob/master/MegadeathSource.cpp
Някой да подскаже?
За да тръгне в този му вид, трябва:
1. include<thread>
2. в класа Door добавяне на const след декларацията на метода -> int TimeToPass() const {return timeToPassInMS;}
3. в класа Person -> да приема (const Door & aDoor)
4. И може би това, което те интересува най-много е:
ExitQueThreads.push_back(std::thread(&Person::passThruDoor, *audience[i], aDoor));
Подаваш класа с функцията, после обекта и накрая параметрите... така, както си ги подала първия път!
И за да не гърми - закоментираш mtx.lock() & mtx.unlock()... мисля, че малко ти е объркана логиката тук. Мютекса блокира достъпа до определен ресурс. Ти практически караш всяка нишка за заспи са 20 сек, обаче не от общото време, а всяка сама за себе си... ако не бъркам.
..и да си зачистиш паметта на финала.. (vector<Person*>)..
Тук, с цел пример, програмата е леко окастрена:
#include <iostream>
#include <thread>
class Door
{
public:
int TimeToPass() const { return 20; }
};
class Person
{
public:
void passThruDoor(const Door &aDoor)
{
std::cout << "Time to exit: " << aDoor.TimeToPass() << " s\n";
}
};
int main()
{
Door door = Door();
Person person = Person();
std::thread th (&Person::passThruDoor, person, door);
th.join();
return 0;
}
Успех занапред