boost线程循环打印字符ABC

// PrintString.cpp : 定义控制台应用程序的入口点。//#include “stdafx.h”#include <boost\thread\thread.hpp>#include <boost\thread\mutex.hpp>#include <boost\thread\condition_variable.hpp>#includ...
摘要由CSDN通过智能技术生成
// PrintString.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <boost\thread\thread.hpp>
#include <boost\thread\mutex.hpp>
#include <boost\thread\condition_variable.hpp>

#include <vector>
#include <iostream>

using namespace boost;

class CPrintString
{
public:
	CPrintString();
	~CPrintString();

	void PrintString(std::vector<std::string> &vc_string);

private:
	void PrintSingleString(int n_index);
	
private:
	std::string str_print_;
	std::vector<std::string> vc_string_;
	mutex m_mutex_;
	condition_variable va_notyfi_;
	int n_cnt_;
};

CPrintString::CPrintString()
{
	n_cnt_ = 10;
}

CPrintString::~CPrintString()
{

}

void CPrintString::PrintString(std::vector<std::string> &vc_string)
{
	if (vc_string.empty())
	{
		return;
	}
	str_print_ = vc_string.at(0);
	vc_string_ = vc_string;
	thread_group tg;
	for (size_t i = 0; i < vc_string.size(); i++)
	{
		tg.create_thread(bind(&CPrintString::PrintSingleString, this, i));
	}

	tg.join_all();
}

void CPrintString::PrintSingleString(int n_index)
{
	unique_lock<mutex> lock(m_mutex_);
	int n_cnt = 0;
	while (n_cnt < n_cnt_)
	{
		va_notyfi_.wait(lock, [&]()->bool { return (str_print_ == vc_string_.at(n_index) ? true : false); });
		std::cout << str_print_ << std::endl;

		if (n_index == vc_string_.size() - 1)
		{
			str_print_ = vc_string_.at(0);
		}
		else
		{
			str_print_ = vc_string_.at(n_index + 1);
		}

		n_cnt++;
		va_notyfi_.notify_all();
	}
}

int main()
{
	CPrintString printString;
	std::vector<std::string> vc_string;
	vc_string.push_back("A");
	vc_string.push_back("B");
	vc_string.push_back("C");
	printString.PrintString(vc_string);

	std::system("pause");
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值