Sdílet prostřednictvím


Oznámení o dokončení asynchronní funkce

V sadě Windows 8 SDK rozhraní ODBC přidalo mechanismus, který aplikace upozorní, když se dokončí asynchronní operace, na kterou budeme odkazovat jako "oznámení při dokončení". (Další informace najdete v tématu Asynchronní spuštění (metoda oznámení ).) Toto téma popisuje některé problémy pro vývojáře ovladačů.

Rozhraní mezi správcem ovladačů a ovladačem

Správce ovladačů interně poskytuje zpětnou volací funkci SQLAsyncNotificationCallback Function. SQLAsyncNotificationCallback může volat pouze ovladač – aplikace ji nemůže přímo volat. Ovladač volá SQLAsyncNotificationCallback při každém přijetí nových dat ze serveru po posledním návratu SQL_STILL_EXECUTING.

Správce ovladačů poskytuje mechanismus zpětného volání, aby mohl ovladač upozornit správce ovladačů, když došlo k určitému pokroku v provádění asynchronní operace, po vrácení odpovídající funkce SQL_STILL_EXECUTING.

Správce ovladačů nastaví atribut SQL_ATTR_ASYNC_DBC_NOTIFICATION_CALLBACK na popisovač připojení ovladače s ukazatelem funkce bez hodnoty NULL, který je typu SQL_ASYNC_NOTIFICATION_CALLBACK, aby ovladač fungoval v režimu oznámení pro všechny asynchronní operace na daném popisovači. Podobně Správce ovladačů nastaví atribut SQL_ATTR_ASYNC_STMT_NOTIFICATION_CALLBACK na popisovač příkazu ovladače s ukazatelem funkce bez hodnoty NULL, což je také typ SQL_ASYNC_NOTIFICATION_CALLBACK, aby ovladač fungoval v režimu oznámení pro všechny asynchronní operace na daném popisovači.

Pokud se na popisovači ovladače provádí asynchronní úloha, měly by asynchronní funkce ovladače pracovat v neblokujícím režimu. Pokud se operace nemůže dokončit okamžitě, měla by funkce ovladače vrátit SQL_STILL_EXECUTING. Tento požadavek platí pro režim dotazování i režim oznámení.

Pokud je popisovač v asynchronním režimu oznámení, ovladač musí zavolat funkci zpětného volání oznámení, jejíž adresa je hodnota pro atribut SQL_ATTR_ASYNC_DBC_NOTIFICATION_CALLBACK nebo SQL_ATTR_ASYNC_STMT_NOTIFICATION_CALLBACK, jednou po vrácení SQL_STILL_EXECUTING. Jinými slovy, jedna vrácená SQL_STILL_EXECUTING musí být spárována s jedním vyvoláním funkce zpětného volání oznámení. Ovladač by měl použít aktuální hodnotu atributu popisovače SQL_ATTR_ASYNC_DBC_NOTIFICATION_CONTEXT nebo SQL_ATTR_ASYNC_STMT_NOTIFICATION_CONTEXT jako hodnotu parametru funkce zpětného volání pContext.

Ovladač nesmí provádět zpětné volání ve vlákně, které volá funkci ovladače; není důvod informovat o průběhu, než se funkce vrátí. Ovladač by měl pro zpětné volání použít vlastní vlákno. Správce ovladačů nebude používat vlákno zpětného volání ovladače pro provádění rozsáhlé logiky zpracování.

Správce ovladačů znovu zavolá původní funkci po zpětném volání ovladače. Správce ovladačů může použít vlákno, které není vláknem aplikace ani vlákno ovladače. Pokud ovladač používá nějaké informace přidružené k vláknu (například token zabezpečení nebo identifikátor uživatele), ovladač by měl uložit požadované informace do počátečního asynchronního volání a použít uloženou hodnotu před dokončením celé asynchronní operace. Obvykle tento druh informací musí používat pouze SQLDriverConnect, SQLConnect nebo SQLBrowseConnect .

Viz také

Vývoj ovladače ODBC