Megosztás:


Értesítés az aszinkron függvény befejezéséről

A Windows 8 SDK-ban az ODBC hozzáadott egy mechanizmust, amely értesíti az alkalmazásokat az aszinkron művelet befejeződésekor, amelyet "értesítés befejezéskor" néven fogunk hivatkozni. (További információ: Aszinkron végrehajtás (értesítési módszer ).) Ez a témakör az illesztőprogram-fejlesztők néhány problémáját ismerteti.

Az illesztőkezelő és az illesztőprogram közötti interfész

A Driver Manager belsőleg biztosít egy SQLAsyncNotificationCallback függvény visszahívási függvényt. Az SQLAsyncNotificationCallbacket csak az illesztőprogram hívhatja meg – egy alkalmazás nem hívhatja meg közvetlenül. Az illesztőprogram meghívja az SQLAsyncNotificationCallback parancsot , amikor új adatok érkeznek a kiszolgálóról a legutóbbi visszatérés után SQL_STILL_EXECUTING.

Az Illesztőprogram-kezelő egy visszahívási mechanizmust biztosít, hogy az illesztőprogram értesíthesse az illesztőprogram-kezelőt, ha a megfelelő függvény visszaadása után valamilyen előrehaladás történt egy aszinkron művelet végrehajtása során SQL_STILL_EXECUTING

Az Illesztőprogram-kezelő beállítja a SQL_ATTR_ASYNC_DBC_NOTIFICATION_CALLBACK attribútumot egy nem NULL függvénymutatóval rendelkező illesztőprogram-kapcsolati leírón, amely SQL_ASYNC_NOTIFICATION_CALLBACK típusú, ahhoz, hogy az illesztőprogram értesítési módban működjön a leíró összes aszinkron műveletéhez. Hasonlóképpen, az Illesztőprogram-kezelő beállítja a SQL_ATTR_ASYNC_STMT_NOTIFICATION_CALLBACK attribútumot egy illesztőprogram-utasítás leíróján egy nem NULL függvénymutatóval, amely szintén SQL_ASYNC_NOTIFICATION_CALLBACK típusú, hogy az illesztőprogram értesítési módban működjön a leírón végzett aszinkron műveletekhez.

Ha egy illesztőprogram-kezelőn aszinkron műveletet hajtanak végre, az aszinkron illesztőprogram-függvényeknek nem blokkoló módban kellene működniük. Ha a művelet nem fejezhető be azonnal, az illesztőprogram-függvénynek SQL_STILL_EXECUTING kell visszaadnia. Ez a követelmény mind a lekérdezési, mind az értesítési módra érvényes.

Ha egy leíró értesítési aszinkron módban van, az illesztőprogramnak egyszer meg kell hívnia az értesítési visszahívási függvényt, amelynek a címe megegyezik a SQL_ATTR_ASYNC_DBC_NOTIFICATION_CALLBACK vagy a SQL_ATTR_ASYNC_STMT_NOTIFICATION_CALLBACK attribútum értékével, a SQL_STILL_EXECUTING visszaadása után. Más szóval, egy SQL_STILL_EXECUTING visszatérési értéket egy értesítési visszahívási függvény meghívásával kell párosítani. Az illesztőnek a SQL_ATTR_ASYNC_DBC_NOTIFICATION_CONTEXT vagy SQL_ATTR_ASYNC_STMT_NOTIFICATION_CONTEXT handle attribútum aktuális értékét kell használnia a pContext visszahívási függvény paraméter értékeként.

Az illesztőprogram nem hívhatja vissza az illesztőprogram függvényét meghívó szálra; a függvény visszatérése előtt nincs ok az előrehaladás jelzésére. Az illesztőprogramnak saját szálat kell használnia a visszahívás végrehajtásához. Az Illesztőprogram-kezelő nem használja az illesztőprogram visszahívási szálát a kiterjedt feldolgozási logika végrehajtásához.

Az illesztőprogram-kezelő az illesztőprogram visszahívása után újra meghívja az eredeti függvényt. Az Illesztőprogram-kezelő olyan szálat használhat, amely nem alkalmazásszál, sem illesztőszál. Ha az illesztőprogram a szálhoz társított információkat (például biztonsági jogkivonatot vagy felhasználói azonosítót) használ, az illesztőprogramnak mentenie kell a szükséges információkat a kezdeti aszinkron hívásban, és a mentett értéket kell használnia, mielőtt a teljes aszinkron művelet befejeződik. Általában csak az SQLDriverConnectnek, az SQLConnectnek vagy az SQLBrowseConnectnek kell ilyen típusú információkat használnia.

Lásd még:

ODBC-illesztőprogram fejlesztése