C12、纤程

目的:方便将UNIX服务器程序移植到Windows中(以转换UNIX多线程为Windows多线程,因为他们使用不同的算法结构),Windows程序应该避免使用纤程。纤程以用户(非内核)方式代码实现。

 

一、将现有的线程转换为纤程:

PVOID ConvertThreadToFiber(PVOID pvParam);

该函数为纤程的执行环境分配内存(200 byte),(并初始化)其组成:

n         用户定义值:pvParam

n         结构化异常处理链的头;

n         纤程内存栈的最高、最低地址

n         CPU寄存器。

返回纤程的执行环境的内存地址

二、在该线程(已成为纤程)创建其他纤程:

PVOID CreateFiber(      // 将创建新内存栈,分配执行环境结构,初始化

                  DWORD dwStackSize,       // 内存栈大小,常 = 0

                  PFIBER_START_ROUTINE pfnStartAddress, // 纤程函数(你的函数)

                  PVOID pvParam);  // 用户定义值

   返回纤程的执行环境的内存地址

三、纤程函数原型:

VOID WINAPI FiberFunc(PVOID pvParam)// CreateFiberpvParam

四、运行新纤程(纤程获得CPU时间的唯一方法):

VOID SwitchToFiber(PVOID pvFiberExecutionContext); // pvFiberExecutionContext = CreateFiber ConvertThreadToFiber返回的地址。

五、撤销纤程:

VOID DeleteFiberPVOID pvFiberExecutionContext; // 参数同上

如果传递了当前与线程相关联的纤程地址,则该线程与其创建的所有纤程被撤销

六、获得当前运行的纤程的执行环境的地址(内蕴函数 infrinsic function,运行快):

PVOID GetCurrentFiber();      

PVOID GetFiberData(); // 前叙pvParam

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值