Condividi tramite


Notifica del completamento della funzione asincrona

In Windows 8 SDK ODBC ha aggiunto un meccanismo per notificare alle applicazioni quando viene completata un'operazione asincrona, a cui si farà riferimento come "notifica al completamento". Per altre informazioni, vedere Esecuzione asincrona (metodo di notifica ). Questo argomento illustra alcuni dei problemi per gli sviluppatori di driver.

Interfaccia tra il driver manager e il driver

Il gestore dei driver fornisce internamente una funzione di callback SQLAsyncNotificationCallback Function. SQLAsyncNotificationCallback può essere chiamato solo dal driver. Un'applicazione non può chiamarla direttamente. Il driver chiama SQLAsyncNotificationCallback ogni volta che nuovi dati vengono ricevuti dal server dopo l'ultima restituzione di SQL_STILL_EXECUTING.

Il Gestore dei Driver fornisce un meccanismo di callback affinché un driver possa notificare al Gestore dei Driver quando sono stati compiuti dei progressi nell'esecuzione di un'operazione asincrona dopo che la funzione corrispondente restituisce SQL_STILL_EXECUTING.

Il Gestore dei driver imposta l'attributo SQL_ATTR_ASYNC_DBC_NOTIFICATION_CALLBACK su un handle di connessione del driver con un puntatore a funzione non NULL, di tipo SQL_ASYNC_NOTIFICATION_CALLBACK, affinché il driver operi in modalità di notifica per qualsiasi operazione asincrona su tale handle. Analogamente, il Gestore del driver imposta l'attributo SQL_ATTR_ASYNC_STMT_NOTIFICATION_CALLBACK su un handle di istruzione del driver con un puntatore a funzione non NULL, che è anche di tipo SQL_ASYNC_NOTIFICATION_CALLBACK, in modo che il driver sia in modalità di notifica per qualsiasi operazione asincrona su tale handle.

Se un'operazione asincrona viene eseguita su un driver handle, le funzioni del driver asincrone devono operare in modalità non bloccante. Se l'operazione non può essere completata immediatamente, la funzione driver deve restituire SQL_STILL_EXECUTING. Questo requisito è vero sia per la modalità di polling che per la modalità di notifica.

Se un handle è in modalità di notifica asincrona, il driver deve chiamare la funzione di callback di notifica, il cui indirizzo rappresenta il valore degli attributi SQL_ATTR_ASYNC_DBC_NOTIFICATION_CALLBACK o SQL_ATTR_ASYNC_STMT_NOTIFICATION_CALLBACK, una volta che è stato restituito SQL_STILL_EXECUTING. In altre parole, una restituzione di SQL_STILL_EXECUTING deve essere associata a un'invocazione della funzione di callback di notifica. Il driver deve usare il valore corrente dell'attributo handle SQL_ATTR_ASYNC_DBC_NOTIFICATION_CONTEXT o SQL_ATTR_ASYNC_STMT_NOTIFICATION_CONTEXT come valore per il parametro della funzione callback pContext.

Il driver non deve richiamare il thread che invoca la funzione del driver; non c'è nessuna ragione per segnalare il progresso prima che la funzione restituisca un valore. Il driver deve usare il proprio thread per il callback. Il Gestore dei driver non userà il thread di callback del driver per l'esecuzione di processi di elaborazione complessi.

Il Gestore dei driver chiamerà di nuovo la funzione originale dopo il callback del driver. Il Gestore driver può utilizzare un thread che non è né un thread dell'applicazione né un thread di driver. Se il driver usa alcune informazioni associate al thread ,ad esempio token di sicurezza o identificatore utente, il driver deve salvare le informazioni necessarie nella chiamata asincrona iniziale e usare il valore salvato prima del completamento dell'intera operazione asincrona. In genere, solo SQLDriverConnect, SQLConnect o SQLBrowseConnect devono usare tale tipo di informazioni.

Vedere anche

Sviluppo di un driver ODBC