V/V s možností upozorňování
Vstupně-výstupní operace výstrahy je metoda, podle které vlákna aplikace zpracovávají asynchronní vstupně-výstupní požadavky pouze v případech, kdy jsou v výstrahovatelném stavu.
Pokud chcete zjistit, kdy je vlákno ve stavu s možností upozornění, zvažte následující scénář:
- Vlákno inicializuje asynchronní požadavek na čtení voláním ReadFileEx ukazatelem na funkci zpětného volání.
- Vlákno zahájí asynchronní požadavek zápisu voláním WriteFileEx ukazatelem na funkci zpětného volání.
- Vlákno volá funkci, která načte řádek dat ze vzdáleného databázového serveru.
V tomto scénáři se volání ReadFileEx a WriteFileEx pravděpodobně vrátí před voláním funkce v kroku 3. Když to uděláte, jádro umístí ukazatele na funkce zpětného volání ve frontě asynchronního volání procedur vlákna (APC). Jádro udržuje tuto frontu speciálně tak, aby uchová vrácené vstupně-výstupní požadavky, dokud je nemůže zpracovat odpovídající vlákno.
Po dokončení načtení řádku a vrácení vlákna z funkce je nejvyšší prioritou zpracování vrácených vstupně-výstupních požadavků ve frontě voláním funkcí zpětného volání. Aby to bylo možné provést, musí zadat stav s možností upozornění. Vlákno to může provést pouze voláním jedné z následujících funkcí s příslušnými příznaky:
- SleepEx
- WaitForSingleObjectEx
- WaitForMultipleObjectsEx
- SignalObjectAndWait
- MsgWaitForMultipleObjectsEx
Když vlákno přejde do stavu výstrahy, dojde k následujícím událostem:
- Jádro zkontroluje frontu APC vlákna. Pokud fronta obsahuje ukazatele na funkci zpětného volání, jádro odebere ukazatel z fronty a odešle ho do vlákna.
- Vlákno spustí funkci zpětného volání.
- Kroky 1 a 2 se opakují pro každý ukazatel zbývající ve frontě.
- Pokud je fronta prázdná, vlákno se vrátí z funkce, která ji umístila do stavu výstrahy.
V tomto scénáři jakmile vlákno zadá stav výstrahy, bude volat funkce zpětného volání odeslané do ReadFileEx a WriteFileExa pak se vrátit z funkce, která ji umístila do stavu výstrahy.
Pokud vlákno přejde do stavu výstrahy, zatímco jeho fronta APC je prázdná, spuštění vlákna bude pozastaveno jádrem, dokud nedojde k některé z následujících akcí:
- Objekt jádra, na který čekáte, se signalizují.
- Ukazatel funkce zpětného volání se umístí do fronty APC.
Vlákno, které používá upozorňující vstupně-výstupní procesy asynchronní vstupně-výstupní požadavky efektivněji, než když jednoduše čekají na příznak události ve struktuře PŘEKRÝVAJÍCÍ SE a mechanismus upozorňujících vstupně-výstupních operací je méně složitý než porty pro dokončování vstupně-výstupních operací použít. Vstupně-výstupní operace s výstrahou však vrátí výsledek V/V požadavku pouze na vlákno, které ho zahájilo. Porty pro dokončování vstupně-výstupních operací toto omezení nemají.
Související témata