|
#pragma once
#include "assert.h"
/****************************************************************************
* class CFiber
****************************************************************************/
class CFiber {
public: // constructors
CFiber(LPFIBER_START_ROUTINE rtn, SIZE_T stack = 0)
{ fiber = ::CreateFiber(stack, rtn, this); }
CFiber() { fiber = NULL; }
virtual ~CFiber() { ::DeleteFiber(fiber); }
BOOL Create(LPFIBER_START_ROUTINE rtn, SIZE_T stack = 0)
{
ASSERT(fiber == NULL);
if(fiber != NULL)
return FALSE;
fiber = ::CreateFiber(stack, rtn, this);
return fiber != NULL;
}
public: // methods
BOOL ConvertThreadToFiber() {
ASSERT(fiber == NULL);
if(fiber != NULL)
return FALSE;
fiber = ::ConvertThreadToFiber(this);
return fiber != NULL;
}
void Attach(LPVOID p) { ASSERT(fiber == NULL); fiber = p; }
LPVOID Detach() { ASSERT(fiber != NULL);
LPVOID result = fiber;
fiber = NULL;
return result;
}
LPVOID GetFiber() { return fiber; }
public: // methods
void run() { ASSERT(fiber != NULL);
::SwitchToFiber(fiber);
}
protected: // data
LPVOID fiber;
};
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.