目的:方便将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);// 即CreateFiber的pvParam
四、运行新纤程(纤程获得CPU时间的唯一方法):
VOID SwitchToFiber(PVOID pvFiberExecutionContext); // pvFiberExecutionContext = CreateFiber 或 ConvertThreadToFiber返回的地址。
五、撤销纤程:
VOID DeleteFiber(PVOID pvFiberExecutionContext); // 参数同上
如果传递了当前与线程相关联的纤程地址,则该线程与其创建的所有纤程被撤销
六、获得当前运行的纤程的执行环境的地址(内蕴函数 infrinsic function,运行快):
PVOID GetCurrentFiber(); 及
PVOID GetFiberData(); // 前叙pvParam