C++中批量线程启动容器中的对象函数

发布于:2025-02-11 ⋅ 阅读:(65) ⋅ 点赞:(0)

 使用容器管理多个类对象,通过函数启动容器中所有类对象的函数。

#include <iostream>
#include <thread>
#include <vector>
#include <chrono>
#include <memory>


class Apple {
public:

	Apple(int num):workspaceNum(num) {}

	void start() {
		flag = true;
		while (flag && count < 10) {
			std::cout << "这是线程: " << workspaceNum << std::endl;
			std::chrono::milliseconds sleeptime(1000);
			std::this_thread::sleep_for(sleeptime);
			count++;
		}
	}


	void end()
	{
		flag = false;
	}

private:
	int workspaceNum;
	bool flag = false;

	int count = 0;
};


class Menu {
public:
	void addApple(Apple& apple)
	{
		appleVec.push_back(apple);
	}

	void startThread() {
		for (int i = 0; i< appleVec.size() ; i++)
		{
			auto threadPtr = std::make_shared<std::thread>([this,i]() {
				appleVec[i].start();
				});

			//智能指针插入到容器中。
			threads.push_back(threadPtr);
		}
	}

	void joinAllThreads()
	{
		for (auto& threadPtr : threads)
		{
			if (threadPtr->joinable())
			{
				threadPtr->join();
			}
		}
	}

private:
	std::vector<Apple> appleVec;

	std::vector<std::shared_ptr<std::thread>> threads;
	
};


int main()
{
	Apple apple1(1);
	Apple apple2(2);

	Menu menu;
	menu.addApple(apple1);
	menu.addApple(apple2);
	menu.startThread();
	menu.joinAllThreads();

	return 0;
}


网站公告

今日签到

点亮在社区的每一天
去签到