
Am 28.07.2010 16:34, schrieb Hartmut Kaiser:
On Windows I'd suggest to fall back to CreateFiber/SwitchToFiber/etc. These functions are not kernel calls, but merely do the context creation/switching. In my experience, it is almost impossible to convince the MSVC C++ runtime libraries to behave properly if you use your own context switching assembly code. OTOH, the measurements we performed shows SwitchToContext being to almost as fast as the hand written assembly code we were using in the beginning.
I find the Win32 Fiber interface ugly - at least the need to call ConvertThreadToFiber() and ConvertFiberToThread(). Until VISTA you had no Function which tells you if you already running in a fiber or not. You could fall back only to some heuristics. The TIB is not changed (only the pointers pointing to the limit and base of the stack). Ofcourse a new SEH chain has to be created and installed for each new context. So I'd like to know which problems did you encounter with own context switching code and MSVC C++ runtime libs. AFAIK migrating Win32 Fibers between threads is not possible and cloning also not - but maybe I'm wrong in this point. Oliver