#define _WIN32_WINNT 0x400
#include <stdio.h>
#include <windows.h>
#define FIBER_COUNT 10
void *fiber_context[FIBER_COUNT];
VOID WINAPI fiberProc(void*);
void main()
{
int i;
int fibers[FIBER_COUNT];
for (i=0; i<FIBER_COUNT; i++)
{
fibers[i] = i;
}
fiber_context[0] = ConvertThreadToFiber(NULL);
for (i=1; i<FIBER_COUNT; i++)
{
fiber_context[i] = CreateFiber(
0,
fiberProc,
&fibers[i]);
if (fiber_context[i]!=NULL)
{
printf("fiber %d created!/n", i);
}
}
for (i=1; i<FIBER_COUNT; i++)
{
if (fiber_context[i]!=NULL)
{
SwitchToFiber(fiber_context[i]);
}
}
}
VOID WINAPI fiberProc(void *fiber_nbr)
{
int nbr;
nbr = *((int*)fiber_nbr);
printf("Hello from fiber %d/n", nbr);
//switch back
SwitchToFiber(fiber_context[0]);
}