本项目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