c++协程
(2016-08-09 16:55:45)
标签:
it |
分类: 进阶1 |
协程与多线程的区别:协程只有一个线程。
协程与普遍函数调用区别:协程会记录函数的执行状态,挂起再恢复会从挂起的状态执行起。
协程是一种能记录函数执行状态的函数调用。
先看一段代码吧,代码来源博客http://www.yeolar.com/note/2013/02/17/coroutines/。
int function(void)
{
}
调用很简单:
printf("%d
printf("%d
printf("%d
printf("%d
输出:0
很显然用静态变量记录了函数的执行状态,实际用的话这种方法问题太多了。我们把静态变量改为参数传递,再把协程用类封装一下。代码如下:
coroutine.h如下:
#ifndef COROUTINE_H_
#define COROUTINE_H_
#include "map"
typedef int (*FUNC)(void* pParam);
struct CrtParam
{
};
enum CoroutineState
{
};
typedef std::map "int, CrtParam*" CrtParamMap;
typedef CrtParamMap::iterator CrtParamMapItr;
class MyCoroutine
{
public:
private:
};
#define YILED()
#define YILEDTIME(yiledMillisecond)
void ResumeTimerFunc(void* pParam);
#endif
coroutine.cpp如下:
#include "stdafx.h"
#include "coroutine.h"
#include "time.h"
#include "process.h"
#include "windows.h"
CrtParamMap MyCoroutine::s_CrtParamMap;
int MyCoroutine::s_Key = 0;
unsigned int MyCoroutine::s_yiledMillisecond = 0;
void MyCoroutine::Init()
{
}
int MyCoroutine::Execute(CrtParam* pCrtParam)
{