Bagikan melalui


Pemberitahuan Penyelesaian Fungsi Asinkron

Di Windows 8 SDK, ODBC menambahkan mekanisme untuk memberi tahu aplikasi ketika operasi asinkron selesai, yang akan kami sebut sebagai "pemberitahuan tentang penyelesaian". (Lihat Eksekusi Asinkron (Metode Pemberitahuan) untuk informasi selengkapnya.) Topik ini membahas beberapa masalah untuk pengembang driver.

Antarmuka antara Pengelola Driver dan Driver

Driver Manager secara internal menyediakan fungsi panggilan balik Fungsi SQLAsyncNotificationCallback. SQLAsyncNotificationCallback hanya dapat dipanggil oleh driver -- aplikasi tidak dapat langsung memanggilnya. Driver memanggil SQLAsyncNotificationCallback setiap kali data baru diterima dari server setelah terakhir kali kembali SQL_STILL_EXECUTING.

Driver Manager menyediakan mekanisme panggilan balik sehingga driver dapat memberi tahu Manajer Driver ketika beberapa kemajuan telah dibuat dalam menjalankan operasi asinkron setelah fungsi yang sesuai mengembalikan SQL_STILL_EXECUTING

Manajer Driver mengatur atribut SQL_ATTR_ASYNC_DBC_NOTIFICATION_CALLBACK pada handel koneksi driver dengan penunjuk fungsi non-NULL, yang berjenis SQL_ASYNC_NOTIFICATION_CALLBACK, agar driver berfungsi dalam mode pemberitahuan untuk setiap operasi asinkron pada handel tersebut. Demikian pula, Driver Manager mengatur atribut SQL_ATTR_ASYNC_STMT_NOTIFICATION_CALLBACK pada handle pernyataan driver dengan penunjuk fungsi non-NULL, yang juga merupakan tipe SQL_ASYNC_NOTIFICATION_CALLBACK, sehingga driver dapat berfungsi dalam mode pemberitahuan untuk setiap operasi asinkron pada handle tersebut.

Jika operasi asinkron dilakukan pada pegangan driver, maka fungsi driver asinkron harus bekerja dengan cara yang tidak memblokir. Jika operasi tidak dapat segera diselesaikan, fungsi driver harus mengembalikan SQL_STILL_EXECUTING. Persyaratan ini berlaku untuk mode polling dan mode pemberitahuan.

Jika handle dalam mode pemberitahuan asinkron, driver harus memanggil fungsi panggilan balik pemberitahuan, yang alamatnya adalah nilai untuk atribut SQL_ATTR_ASYNC_DBC_NOTIFICATION_CALLBACK atau SQL_ATTR_ASYNC_STMT_NOTIFICATION_CALLBACK, setelah sekali mengembalikan SQL_STILL_EXECUTING. Dengan kata lain, satu SQL_STILL_EXECUTING yang kembali harus dipasangkan dengan satu pemanggilan fungsi panggilan balik pemberitahuan. Driver harus menggunakan nilai saat ini dari atribut handle SQL_ATTR_ASYNC_DBC_NOTIFICATION_CONTEXT atau SQL_ATTR_ASYNC_STMT_NOTIFICATION_CONTEXT sebagai nilai untuk parameter fungsi panggilan kembali pContext.

Driver tidak boleh melakukan panggilan balik ke thread yang memanggil fungsi pengandar; tidak ada alasan untuk memberi tahu kemajuan sebelum fungsi tersebut kembali. Pengemudi harus menggunakan threadnya sendiri untuk panggilan kembali. Driver Manager tidak akan menggunakan utas panggilan balik driver untuk menjalankan logika pemrosesan yang kompleks.

Manajer Driver akan memanggil fungsi asli lagi setelah driver memanggil kembali. Driver Manager dapat menggunakan utas yang bukan utas aplikasi atau utas driver. Jika driver menggunakan beberapa informasi yang terkait dengan utas (misalnya, token keamanan atau pengidentifikasi pengguna), driver harus menyimpan informasi yang diperlukan dalam panggilan asinkron awal dan menggunakan nilai tersimpan sebelum seluruh operasi asinkron selesai. Biasanya, hanya SQLDriverConnect, SQLConnect, atau SQLBrowseConnect yang perlu menggunakan informasi semacam itu.

Lihat Juga

Mengembangkan Driver ODBC