gpt4 book ai didi

c++ - 多个无限线程

转载 作者:行者123 更新时间:2023-11-28 05:27:45 25 4
gpt4 key购买 nike

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

线程应该代表独立的输入对象,这些对象随机创建数据并将该数据发送到另一个接收者对象。

我的问题是我想让他们无限期地创建数据。但是当我启动第一个线程时,它会因为 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();
}
}

最佳答案

将线程设为成员变量,并将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 是非常不鼓励的,因为您失去了线程的所有跟踪并且您无法告诉它在应用程序终止时干净地关闭。

关于c++ - 多个无限线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40195239/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com