Vlákna
optické je jednotka provádění, kterou musí aplikace naplánovat ručně. Vlákna běží v kontextu vláken, která je plánují. Každé vlákno může naplánovat více vláken. Obecně platí, že vlákna neposkytují výhody oproti dobře navržené vícevláknové aplikaci. Použití vláken však může usnadnit portování aplikací, které byly navrženy tak, aby plánovaly vlastní vlákna.
Z hlediska systému jsou operace prováděné vláknem považovány za prováděné vláknem, které ho spouští. Pokud například vlákno přistupuje k místnímu úložišti vlákno (TLS), přistupuje k místnímu úložišti vlákna vlákna, na kterém běží. Kromě toho, pokud vlákno volá ExitThread funkce, vlákno, na kterém běží, ukončí. Vlákno však nemá všechny stejné informace o stavu přidružené k němu, jako je spojené s vláknem. Jedinými informacemi o stavu uchovávanými pro vlákno je jeho zásobník, podmnožina jeho registrů a data vláken poskytnutá během vytváření vláken. Uložené registry jsou sada registrů, které se obvykle zachovají napříč voláním funkce.
Vlákna nejsou předem naplánována. Naplánujete vlákno tak, že ho přepnete z jiného vlákna. Systém pořád plánuje spouštění vláken. Když je vlákno spuštěné vlákno předem, jeho aktuálně běžící vlákno je předem zrušen, ale zůstane vybrán. Vybrané vlákno se spustí při spuštění vlákna.
Před plánováním prvního vlákna zavolejte funkci ConvertThreadToFiber vytvořit oblast, ve které chcete uložit informace o stavu vláken. Volající vlákno je nyní spuštěné vlákno. Informace o uloženém stavu pro toto vlákno zahrnují data vláken předaná jako argument ConvertThreadToFiber.
Funkce CreateFiber slouží k vytvoření nového vlákna z existujícího vlákna; volání vyžaduje velikost zásobníku, počáteční adresu a data vláken. Počáteční adresa je obvykle uživatelsky zadaná funkce, která se nazývá vláknová funkce, která přebírá jeden parametr (data vláken) a nevrací hodnotu. Pokud se vaše vlákno vrátí, vlákno běžící vlákno ukončí. Chcete-li spustit jakékoli vlákno vytvořené pomocí CreateFiber, zavolejte funkci SwitchToFiber. Můžete volat SwitchToFiber s adresou vlákna vytvořeného jiným vláknem. K tomu musíte mít adresu vrácenou do druhého vlákna, když se nazývá CreateFiber a musíte použít správnou synchronizaci.
Vlákno může načíst data vláken voláním makra GetFiberData. Vlákno může kdykoli načíst adresu vlákna voláním GetCurrentFiber makro.
Vlákno může použít místní úložiště vláken (FLS) k vytvoření jedinečné kopie proměnné pro každé vlákno. Pokud nedojde k přepínání vláken, FLS funguje přesně stejně jako místní úložiště vláken. Funkce FLS (FlsAlloc, FlsFree, FlsGetValuea FlsSetValue) manipulují s FLS přidruženými k aktuálnímu vláknu. Pokud vlákno spouští vlákno a vlákno je přepnuto, FLS se také přepne.
Chcete-li vyčistit data přidružená k vláknu, zavolejte funkci DeleteFiber. Tato data zahrnují zásobník, podmnožinu registrů a dat vláken. Pokud aktuálně spuštěná vlákna volání DeleteFiber, jeho vlákno volá ExitThread a ukončí. Nicméně, pokud vybrané vlákno vlákna je odstraněno vlákno běžící v jiném vlákně, vlákno s odstraněným vláknem je pravděpodobně ukončeno neobvykle, protože vlákno bylo uvolněno.