Sdílet prostřednictvím


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ář:

  1. Vlákno inicializuje asynchronní požadavek na čtení voláním ReadFileEx ukazatelem na funkci zpětného volání.
  2. Vlákno zahájí asynchronní požadavek zápisu voláním WriteFileEx ukazatelem na funkci zpětného volání.
  3. 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:

Když vlákno přejde do stavu výstrahy, dojde k následujícím událostem:

  1. 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.
  2. Vlákno spustí funkci zpětného volání.
  3. Kroky 1 a 2 se opakují pro každý ukazatel zbývající ve frontě.
  4. 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í.

asynchronní volání procedur