嘿:)这不是一个实际的例子。它只是测试一些东西。
线程应该表示独立的输入对象,它们随机创建数据并将此数据发送到另一个接收器对象。
我的问题是我希望他们在无限时间内创建数据。但是当我启动第一个线程时,它会因为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;
};
#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();
}
}
答案 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
,并且当应用程序终止时你无法告诉它干净地关闭。