首页 > 其他分享 >协程示例

协程示例

时间:2023-06-15 22:31:37浏览次数:27  
标签:TestCoro 协程 cout 示例 int Coro private include


协程(Coroutine)与线程类似,可看成用户线程,由用户调度,而不是系统调度。

示例创建1W个协程对象(TestCoro),然后随机调度运行。

1W个协程运行于同一个线程中。

协程构造绑定到CoroFun(), 与boost::thread的创建相同。

#include <iostream>
#include <vector>

#include <boost/bind.hpp>
#include <boost/coroutine/all.hpp>
#include <boost/make_shared.hpp>
#include <boost/shared_ptr.hpp>

using namespace std;

// test coroutine class
class TestCoro
{
public:
    explicit TestCoro(int i);
    ~TestCoro();
    
public:
    void operator()();
    bool IsCompleted() const { return !m_coro; }
    
private:
	typedef boost::coroutines::coroutione<void ()> Coro;
	
private:
    void CoroFun(Coro::caller_type & ca);
    
private:
    int m_i;
    Coro m_coro;
    Coro::caller_type * m_pCa;    	
};

TestCoro::TestCoro(int i)
: m_i(i)
, m_pCa(NULL)
{
	cout << "TestCoro(" << i << ")" << endl;
	m_coro = Coro(boost::bind(&TestCoro::CoroFun, this, _1));
}

TestCoro::~TestCoro()
{
	cout << "~TestCoro(" << m_i << ")" << endl;
}

void TestCoro::operator()()
{
	m_coro();
}

void TestCoro::CoroFun(Coro::caller_type & ca)
{
	m_pCa = &ca;
	
	for (int i = 0; i < 10; i++)
	{
		BOOST_ASSERT(m_pCa == &ca);
		(*m_pCa)();
		cout << m_i << " - " << i << endl;
	}
}

int main()
{
	typedef boost::shared_ptr<TestCoro> TestCoroPtr;
	typedef std::vector<TestCoroPtr> TestCoroVec;
	TestCoroVec v;
	for (int i = 0; i < 10000; i++)
	    v.push_back(boost::make_shared<TestCoro>(i));
	    
	cout << "Start coroutines." << endl;
	
	while (!v.empty)
	{
		size_t idx = rand() % v.size();
		TestCoroPtr & pCoro = v[idx];
		(*pCoro)();
		if (pCoro->IsCompleted())
		{
			v[idx] = v[v.size() - 1];
			v.pop_back();
		}
	}
	
	cout << "Coroutines ended." << endl;
	return 0;
}




标签:TestCoro,协程,cout,示例,int,Coro,private,include
From: https://blog.51cto.com/u_16162321/6495492

相关文章

  • Spring之SpEL表达式操作示例解析
    目录1SpEL1.1简介1.2简单示例2深入示例2.1运算2.1.1算术运算2.1.2逻辑运算2.1.3比较运算2.1.4使用字符代替符号2.1.5使用正则表达式2.1.6使用instanceof2.1.7三目运算(if..else..)2.1.8表达式模板TemplateParserContext2.2字符串2.2.1操作2.2.2调用字符串方法2.3使......
  • 15 Spring核心注释示例
    我们经常将这些称为“Spring核心注释”,我们将在本文中对它们进行审核。这是所有已知的Spring核心注释的列表。@Autowired我们可以使用  @Autowired 注释  来标记Spring将要解析和注入的依赖关系。我们可以将这个注释与构造函数,setter或字段注入一起使用。构造函数注入:@RestCon......
  • Kotlin协程-那些理不清乱不明的关系
    Kotlin的协程自推出以来,受到了越来越多Android开发者的追捧。另一方面由于它庞大的API,也将相当一部分开发者拒之门外。本篇试图从协程的几个重要概念入手,在复杂API中还原出它本来的面目,以全新的角度带读者走进Kotlin协程世界。什么是协程在很多有关协程的文章中,描述协程通常会......
  • 淘宝接口数据采集获得店铺详情api接口获取源代码调用示例展示
     淘宝店铺详情API接口是阿里巴巴开放平台提供的一种API接口,用于获取指定淘宝店铺的详细信息,如店铺名称、店铺简介、开店时间、主营类目等信息。具体来说,淘宝店铺详情API接口(免费获取调用私信)的作用包括:1.获取店铺基本信息:可以获取店铺名称、描述、卖家主页、好评率等基本信息,帮助......
  • Java中的WeakHashMap与类示例
    在本文中,我们将WeakHashMap 通过示例从java.util包中学习  类。我们将学到什么?WeakHashMap 课程概述WeakHashMap 类构造方法摘要WeakHashMap 类构造方法WeakHashMap 类示例1.WeakHashMap类概述WeakHashMap 是一个基于Hash表的Map接口实现的弱键。当其密钥不再正常使用......
  • 淘宝接口数据采集获得店铺详情api接口获取源代码调用示例展示
    ​ 淘宝店铺详情API接口是阿里巴巴开放平台提供的一种API接口,用于获取指定淘宝店铺的详细信息,如店铺名称、店铺简介、开店时间、主营类目等信息。具体来说,淘宝店铺详情API接口(免费获取调用)的作用包括:1.获取店铺基本信息:可以获取店铺名称、描述、卖家主页、好评率等基本信息,帮......
  • Oracle动态建表示例
    declarev_sqlvarchar2(5000);v_iscountnumber;begin--检查表是否存在selectcount(1)intov_iscountfromuser_tableswheretable_name=upper('${tableName}');--不存在执行DDL语句ifv_iscount=0then--执行建表语句v_......
  • k8s HPA 示例
    web服务depoly-demoapp-v10.yamlapiVersion:v1kind:Namespacemetadata:name:hpa-demoapp---apiVersion:apps/v1kind:Deploymentmetadata:labels:app:demoappv10name:demoappv10namespace:hpa-demoappspec:#replicas:1selector:......
  • pytorch 使用示例
    记录通过pytorch编写cnn模型示例,包括训练、模型、预测全流程代码结构,数据采集公共调制方式识别数据集,编写代码简单,以便进行pytorch学习。train.pyimportosimportnumpyasnpimporttorchimporttorch.nnasnnimporttorch.optimasoptimfromtqdmimporttqdmfrom......
  • HTTP Proxy Demo 代码示例
    以下是一个简单的HTTPProxyDemo代码,使用Python3编写: ```pythonimportsocket defhandle_request(client_socket):#接收客户端请求request_data=client_socket.recv(1024)print(request_data.decode()) #解析请求,获取目标主机和端口号first_line=reque......