Delen via


Melding van voltooiing van Asynchrone Functie

In de Windows 8 SDK heeft ODBC een mechanisme toegevoegd om toepassingen op de hoogte te stellen wanneer een asynchrone bewerking is voltooid. Deze wordt 'melding bij voltooiing' genoemd. (Zie Asynchrone uitvoering (meldingsmethode) voor meer informatie.) In dit onderwerp worden enkele problemen besproken voor ontwikkelaars van stuurprogramma's.

De interface tussen Driver Manager en Driver

Driver Manager biedt intern een callback-functie SQLAsyncNotificationCallback- functie. SQLAsyncNotificationCallback kan alleen worden aangeroepen door het stuurprogramma. Een toepassing kan deze niet rechtstreeks aanroepen. Het stuurprogramma wordt opgeroepen SQLAsyncNotificationCallback wanneer nieuwe gegevens van de server worden ontvangen na de laatste keer dat SQL_STILL_EXECUTING werd geretourneerd.

De Driver Manager biedt een callback-mechanisme, zodat een stuurprogramma de Driver Manager kan waarschuwen wanneer er enige voortgang is geboekt bij het uitvoeren van een asynchrone bewerking nadat de bijbehorende functie SQL_STILL_EXECUTING retourneert.

Driver Manager stelt het kenmerk SQL_ATTR_ASYNC_DBC_NOTIFICATION_CALLBACK in op een verbindingsgreep voor stuurprogramma's met een niet-NULL-functieaanwijzer, die van het type SQL_ASYNC_NOTIFICATION_CALLBACK is, zodat het stuurprogramma werkt in de meldingsmodus voor asynchrone bewerkingen op die ingang. Op dezelfde manier stelt Driver Manager het kenmerk SQL_ATTR_ASYNC_STMT_NOTIFICATION_CALLBACK in op een stuurprogramma-instructiegreep met een niet-NULL-functieaanwijzer, die ook van het type SQL_ASYNC_NOTIFICATION_CALLBACK is, zodat het stuurprogramma werkt in de meldingsmodus voor asynchrone bewerkingen op die ingang.

Als een asynchrone bewerking wordt uitgevoerd op een besturingshandvat, moeten de asynchrone stuurprogrammafuncties niet-blokkerend zijn. Als de bewerking niet onmiddellijk kan worden voltooid, moet de stuurprogrammafunctie SQL_STILL_EXECUTING retourneren. Deze vereiste geldt voor zowel de pollingmodus als de meldingsmodus.

Als een handle zich in de asynchrone meldingsmodus bevindt, moet de driver de callback-functie voor meldingen aanroepen, waarvan het adres de waarde is voor het kenmerk SQL_ATTR_ASYNC_DBC_NOTIFICATION_CALLBACK of SQL_ATTR_ASYNC_STMT_NOTIFICATION_CALLBACK, eenmalig nadat SQL_STILL_EXECUTING is geretourneerd. Met andere woorden, één geretourneerde SQL_STILL_EXECUTING moet worden gekoppeld aan één aanroep van de callback-functie voor meldingen. Het stuurprogramma moet de huidige waarde van het kenmerk SQL_ATTR_ASYNC_DBC_NOTIFICATION_CONTEXT of SQL_ATTR_ASYNC_STMT_NOTIFICATION_CONTEXT gebruiken als de waarde voor de callbackfunctieparameter pContext.

Het stuurprogramma mag niet terugbellen binnen de thread die de stuurprogrammafunctie aanroept; er is geen reden om vooruitgang te melden voordat de functie terugkeert. Het stuurprogramma moet zijn eigen thread gebruiken om de callbackfunctie aan te roepen. Driver Manager gebruikt de callback-thread van het stuurprogramma niet voor het uitvoeren van uitgebreide verwerkingslogica.

Driver Manager roept de oorspronkelijke functie opnieuw aan nadat het stuurprogramma terugbelt. Driver Manager kan een thread gebruiken die geen toepassingsthread of een stuurprogrammathread is. Als het stuurprogramma bepaalde informatie gebruikt die is gekoppeld aan de thread (bijvoorbeeld beveiligingstoken of gebruikers-id), moet het stuurprogramma de vereiste gegevens opslaan in de eerste asynchrone aanroep en de opgeslagen waarde gebruiken voordat de hele asynchrone bewerking is voltooid. Normaal gesproken moeten alleen SQLDriverConnect, SQLConnect of SQLBrowseConnect dat soort informatie gebruiken.

Zie ook

Een ODBC-stuurprogramma ontwikkelen