Эй, это не очень практичный пример. Это просто проверить некоторые вещи.Несколько бесконечных нитей
Потоки должны представлять собой независимые объекты ввода, которые произвольно создают данные и отправляют эти данные другому объекту-приемнику.
Моя проблема в том, что я хочу, чтобы они создавали данные в течение бесконечного времени. Но поскольку я запускаю первый поток, он застрял в причине цикла while.
Как можно запустить несколько бесконечных потоков?
класс А:
#pragma once
#include <iostream>
#include <thread>
class A
{
public:
A() : m_ID(-1) {}
A(int _ID) : m_ID(_ID) {}
~A() {}
public:
void DoWork()
{
std::thread T(&A::Work, this);
T.join();
}
private:
void Work()
{
while (true)
{
// do stuff
std::cout << m_ID << "\n";
}
}
private:
int m_ID;
};
main.cpp:
#include "A.h"
static const unsigned int s_NumberOfObjects = 5;
void main()
{
A As[s_NumberOfObjects];
for (size_t i = 0; i < s_NumberOfObjects; i++)
{
As[i] = A(i);
}
for (size_t i = 0; i < s_NumberOfObjects; i++)
{
As[i].DoWork();
}
}
Удалите строку 'T.join();' из 'A :: DoWork()' – Leon
, затем я получаю ошибку: R6010 - abort() был вызван – Chris
Вместо этого поставьте 'T.detach()'. – Leon