saide_a Ответов: 1

Проблема с использованием библиотеки потоков в c++11


Я хочу использовать библиотеку потоков, когда поток является функцией-членом класса
предположим, что у меня есть 2 потока в классе

Что я уже пробовал:

class produceconsume
{
    public:
        produceconsume();
        virtual ~produceconsume();
        thread producer()
        {
            return std::thread(&producerth, this);
        }
        thread consumer()
        {
            return std::thread(&consumerth, this);
        }
        void producerth();
        void consumerth();
        void run();
    private:
};

где producerth и consumerth() имеют цикл while true,
и запустить реализуется следующим образом:
void run()
{
      producer() 
      consumer()
}


Я получил завершение времени выполнения необычным способом исключение

помогите мне исправить ошибку

1 Ответов

Рейтинг:
6

CPallini

Это происходит потому, что потоки потребителя и производителя переживают основной поток (ваша программа завершается сразу же после создания потока).
Попробуйте, например:

#include <iostream>
#include <thread>

class produceconsume
{
    public:
        produceconsume(){}
        virtual ~produceconsume(){}
        std::thread producer()
        {
            return std::thread(&produceconsume::producerth, this);
        }
        std::thread consumer()
        {
            return std::thread(&produceconsume::consumerth, this);
        }
        void producerth();
        void consumerth();
        void run();
    private:
};

void produceconsume::producerth()
{
  while (true) {}
}
void produceconsume::consumerth()
{
  while (true) {}
}
void produceconsume::run()
{
  auto tp = producer();
  auto tc = consumer();
  tc.join();
  tp.join();
}


saide_a

Большое спасибо , это работает

CPallini

Добро пожаловать.