多个无限线程

时间:2016-10-22 17:51:07

标签: c++ multithreading

嘿:)这不是一个实际的例子。它只是测试一些东西。

线程应该表示独立的输入对象,它们随机创建数据并将此数据发送到另一个接收器对象。

我的问题是我希望他们在无限时间内创建数据。但是当我启动第一个线程时,它会因为while循环而卡住。

如何启动多个无限线程?

A类:

#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();
    }
}

1 个答案:

答案 0 :(得分:1)

使线程成为成员变量,并将join函数移动到A析构函数

class A{
  /* ... */

public:
   ~A() {  m_Worker.join(); }

/*...*/
 void DoWork()
{
    m_Worker = std::thread(&A::Work, this);
}

private:
   int m_ID;
   std::thread m_Worker;

};
当你松开线程的所有轨道时,非常不鼓励使用detach,并且当应用程序终止时你无法告诉它干净地关闭。