c++协程

博客介绍了腾讯开源库的使用基础,包括从github下载libco,编译静态库,新建demo.cpp并拷贝官方Example内容进行编译运行。还讲解了如何写第一个demo,用到co_routine.h文件,实现交替打印信息,以及多参数传递时新建demoDoublePara.cpp。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本项目github地址:https://github.com/Sherhang/colib

腾讯开源库使用基础

到github下载libco, 直接make,此时你会发现生成了lib和solib文件夹。我们只需要使用lib文件夹下的静态库。把所有头文件拷贝过来。放在lib下面。

新建一个demo.cpp,此时你可以直接拷贝任意一个官方库里面的Example内容。

编译      g++ -g demo.cpp -o demo  -I./colib -L./colib -lcolib -lpthread -ldl

-I表示头文件位置,-L表示库文件位置, -lpthread -ldl是系统库,所以前面不用加位置。

运行程序./demo

开始写第一个demo

我们只需要用到co_routine.h这个文件。

新建一个文件demoBase.cpp该文件实现交替打印信息。

#include <iostream>
#include "co_routine.h"
using namespace std;
void * f1(void* s)
{
	string * ss=(string*) s;
	for (size_t i =0;i<5;++i)
	{
		cout<<*ss<<" "<<i<<endl;
	}
	co_yield_ct();
	for(int i=5;i<10;i++)
		cout<<*ss<<" "<<i<<endl;
   
	return NULL;
}

void * f2(void* a)
{
	int *aa=(int*) a;
	for(int i=0;i<5;i++)
			cout<<*aa+i<<endl;
	co_yield_ct();//退出当前协程
	for(int i=5;i<10;i++)
			cout<<*aa+i<<endl;
	return NULL;
}

int main()
{
	stCoRoutine_t * cof1;//协程结构体
	stCoRoutine_t* cof2;
	string s="ye";
	string* s_ptr=&s;
	int a=100;
	int * a_ptr=&a;
	co_create(&cof1,NULL,f1,s_ptr);//创建协程
	co_create(&cof2,NULL,f2,a_ptr);
	co_resume(cof1);//开启协程
	co_resume(cof2);
	co_resume(cof1);//开启协程f1
	co_resume(cof2);
	return 0;
}

注意:所有需要协程化的方法都应该是这种形式

void* fun(void* arg)

所有函数的参数通过指针来传递,所以在f1函数里面,第一步就是对参数进行转换。协程和线程不同,你需要自己去管理。在上面的demo中,用了四个co_resume ()就是这个原因。

多参数传递

新建一个demoDoublePara.cpp

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值