Как передать mutex классу? C++11

325
27 января 2017, 06:40

Можно ли сделать лучше?

class Block
{
public:
    Block(unsigned int delay)
    {
        _Delay = delay;
        _NextTick = std::time(nullptr);
    }
    void Run(std::shared_ptr<std::mutex> &mutex)
    {
        _Thread = std::thread([=] { RunTime(std::ref(*mutex.get())); });
    }
    void RunTime(std::mutex &mutex)
    {
        while (true)
        {
            if (std::time(nullptr) >= _NextTick)
            {
                mutex.lock();
                Echo();
                mutex.unlock();
                _NextTick = std::time(nullptr) + _Delay;
            }
        }
    }
    std::thread &GetThread() { return _Thread; }
    // return code
    virtual unsigned int Echo() = 0;
private:
    std::time_t _NextTick;
    std::thread _Thread;
    unsigned int _Delay;
};
class Logger : public Block
{
public:
    Logger(unsigned int delay)
        : Block(delay)
    {
    }
    unsigned int Echo()
    {
        std::cout << "Tick Logger" << std::endl;
        return 0;
    }
};
class Core
{
public:
    Core()
    {
        for (int a = 0; a < 500; a++)
        {
            _Blocks.push_back(new Logger(0));
        }
    }
    void RunAllBlock()
    {
        auto mutex = std::make_shared<std::mutex>();
        for (auto block : _Blocks)
        {
            block->Run(mutex);
        }
    }
    ~Core()
    {
        for (auto block : _Blocks)
        {
            block->GetThread().join();
        }
    }
private:
    std::vector<Block*> _Blocks;
};
void main()
{
    Core c;
    c.RunAllBlock();
}
READ ALSO
Сортировка структуры точек с помощью sort

Сортировка структуры точек с помощью sort

У меня есть структура точки:

366
Рекурсия вызваная из базового класса

Рекурсия вызваная из базового класса

Все мы знаем обычную рекурсию, например:

363
Размер массива string

Размер массива string

Есть массив типа string, в который может быть записано как 1, так и 200 значений

346
Получение директории из argv

Получение директории из argv

В argv[0] находится полный путь до до исполняемого файла, а как получить директорию, в которой находится файл?

363