Aracılığıyla paylaş


Asenkron İşlev Tamamlanma Bildirimi

Windows 8 SDK'sında ODBC, zaman uyumsuz bir işlem tamamlandığında uygulamaları bilgilendirmek için "tamamlanma bildirimi" olarak adlandıracağımız bir mekanizma ekledi. (Daha fazla bilgi için bkz. Zaman Uyumsuz Yürütme (Bildirim Yöntemi ).) Bu konuda sürücü geliştiricileriyle ilgili bazı sorunlar ele alınmaktadır.

Sürücü Yöneticisi ile Sürücü Arasındaki Arabirim

Driver Manager dahili olarak, SQLAsyncNotificationCallback işlevi adlı bir geri çağırma işlevi sağlar. SQLAsyncNotificationCallback yalnızca sürücü tarafından çağrılabilir; bir uygulama bunu doğrudan çağıramaz. Sürücü, en son SQL_STILL_EXECUTING döndüğünden sonra sunucudan yeni veriler alındığında, SQLAsyncNotificationCallback fonksiyonunu çağırır.

Driver Manager, karşılık gelen işlev SQL_STILL_EXECUTING döndürdükten sonra, bir asenkron işlemin yürütülmesinde ilerleme kaydedildiğinde sürücünün Driver Manager'a bildirimde bulunabilmesi için bir geri çağırma mekanizması sağlar.

Sürücü Yöneticisi, sürücü bağlantı tutamacında, bu tutamacın üzerindeki zaman uyumsuz işlemler için bildirim modunda çalışabilmesi amacıyla, SQL_ASYNC_NOTIFICATION_CALLBACK türünde, NULL olmayan bir işlev işaretçisi ile SQL_ATTR_ASYNC_DBC_NOTIFICATION_CALLBACK özniteliğini ayarlar. Benzer şekilde Driver Manager, sürücü deyimi tanıtıcısında SQL_ATTR_ASYNC_STMT_NOTIFICATION_CALLBACK özniteliğini null olmayan işlev işaretçisiyle ayarlar ve bu da SQL_ASYNC_NOTIFICATION_CALLBACK türündedir ve sürücünün bu tanıtıcıdaki zaman uyumsuz işlemler için bildirim modunda çalışmasını sağlar.

Bir sürücü tutamacında zaman uyumsuz bir işlem gerçekleştirilirse, zaman uyumsuz sürücü işlevleri engelleyici olmayan bir stilde çalışmalıdır. İşlem hemen tamamlanamazsa sürücü işlevi SQL_STILL_EXECUTING döndürmelidir. Bu gereksinim hem yoklama modu hem de bildirim modu için geçerlidir.

Tanıtıcı zaman uyumsuz bildirim modundaysa, sürücü SQL_STILL_EXECUTING döndürdikten sonra, adresi SQL_ATTR_ASYNC_DBC_NOTIFICATION_CALLBACK veya SQL_ATTR_ASYNC_STMT_NOTIFICATION_CALLBACK özniteliğinin değeri olan bildirim geri çağırma işlevini çağırmalıdır. Başka bir deyişle, dönen bir SQL_STILL_EXECUTING, bildirim geri çağırma işlevinin bir çağrısıyla eşleştirilmelidir. Sürücü, pContext geri çağırma işlevi parametresinin değeri olarak SQL_ATTR_ASYNC_DBC_NOTIFICATION_CONTEXT veya SQL_ATTR_ASYNC_STMT_NOTIFICATION_CONTEXT tanıtıcı özniteliğinin geçerli değerini kullanmalıdır.

Sürücü, sürücü işlevini çağıran iş parçacığında geri çağırmamalıdır; işlevi döndürmeden önce ilerleme durumunu bildirmek için bir neden yoktur. Sürücü, geri çağırma işlevi için kendi iş parçacığını kullanmalıdır. Sürücü Yöneticisi, kapsamlı işleme mantığını yürütmek için sürücünün geri çağırma iş parçacığını kullanmaz.

Sürücü geri çağırma yaptıktan sonra Sürücü Yöneticisi özgün işlevi yeniden çağırır. Sürücü Yöneticisi ne uygulama iş parçacığı ne de sürücü iş parçacığı olan bir iş parçacığı kullanabilir. Sürücü iş parçacığıyla ilişkili bazı bilgileri (örneğin, güvenlik belirteci veya kullanıcı tanımlayıcısı) kullanıyorsa, sürücü ilk zaman uyumsuz çağrıda gerekli bilgileri kaydetmeli ve zaman uyumsuz işlemin tamamı tamamlanmadan önce kaydedilen değeri kullanmalıdır. Genellikle yalnızca SQLDriverConnect, SQLConnect veya SQLBrowseConnect'in bu tür bilgileri kullanması gerekir.

Ayrıca Bkz.

ODBC Sürücüsü Geliştirme