비동기 함수 완료 알림
Windows 8 SDK에서 ODBC는 비동기 작업이 완료될 때 애플리케이션에 알리는 메커니즘을 추가했습니다. 이 메커니즘은 "완료 시 알림"으로 참조됩니다. (참조) 자세한 내용은 비동기 실행(알림 메서드) 입니다. 이 항목에서는 드라이버 개발자를 위한 몇 가지 문제에 대해 설명합니다.
드라이버 관리자와 드라이버 사이의 인터페이스
드라이버 관리자는 내부적으로 콜백 함수 SQLAsyncNotificationCallback 함수를 제공합니다. SQLAsyncNotificationCallback 은 드라이버에서만 호출할 수 있습니다. 애플리케이션에서 직접 호출할 수 없습니다. 드라이버는 마지막으로 SQL_STILL_EXECUTING 반환한 후 서버에서 새 데이터를 받을 때마다 SQLAsyncNotificationCallback을 호출합니다.
드라이버 관리자는 해당 함수가 SQL_STILL_EXECUTING 반환한 후 비동기 작업을 실행할 때 드라이버 관리자에게 알릴 수 있도록 콜백 메커니즘을 제공합니다SQL_STILL_EXECUTING
드라이버 관리자는 드라이버가 해당 핸들의 비동기 작업에 대해 알림 모드에서 작동하도록 SQL_ASYNC_NOTIFICATION_CALLBACK 형식인 NULL이 아닌 함수 포인터를 사용하여 드라이버 연결 핸들의 SQL_ATTR_ASYNC_DBC_NOTIFICATION_CALLBACK 특성을 설정합니다. 마찬가지로 드라이버 관리자는 드라이버가 해당 핸들의 모든 비동기 작업에 대해 알림 모드에서 작동하도록 SQL_ASYNC_NOTIFICATION_CALLBACK 형식이기도 한 비 NULL 함수 포인터를 사용하여 드라이버 문 핸들의 SQL_ATTR_ASYNC_STMT_NOTIFICATION_CALLBACK 특성을 설정합니다.
드라이버 핸들에서 비동기 작업을 수행하는 경우 비동기 드라이버 함수는 비차단 스타일로 작동해야 합니다. 작업을 즉시 완료할 수 없는 경우 드라이버 함수는 SQL_STILL_EXECUTING 반환해야 합니다. 이 요구 사항은 폴링 모드와 알림 모드 모두에 적합합니다.
핸들이 알림 비동기 모드인 경우 드라이버는 SQL_STILL_EXECUTING 반환한 후 주소가 SQL_ATTR_ASYNC_DBC_NOTIFICATION_CALLBACK 또는 SQL_ATTR_ASYNC_STMT_NOTIFICATION_CALLBACK 특성의 값인 알림 콜백 함수를 호출해야 합니다. 즉, 하나의 반환 SQL_STILL_EXECUTING 알림 콜백 함수의 호출 하나와 쌍을 이겨야 합니다. 드라이버는 SQL_ATTR_ASYNC_DBC_NOTIFICATION_CONTEXT 또는 SQL_ATTR_ASYNC_STMT_NOTIFICATION_CONTEXT 핸들 특성의 현재 값을 콜백 함수 매개 변수 pContext의 값으로 사용해야 합니다.
드라이버는 드라이버 함수를 호출하는 스레드에서 다시 호출하지 않아야 합니다. 함수가 반환되기 전에 진행 상황을 알릴 이유가 없습니다. 드라이버는 자체 스레드를 사용하여 콜백해야 합니다. 드라이버 관리자는 광범위한 처리 논리를 실행하기 위해 드라이버의 콜백 스레드를 사용하지 않습니다.
드라이버 관리자는 드라이버가 다시 호출된 후 원래 함수를 다시 호출합니다. 드라이버 관리자는 애플리케이션 스레드나 드라이버 스레드가 없는 스레드를 사용할 수 있습니다. 드라이버가 스레드와 연결된 일부 정보(예: 보안 토큰 또는 사용자 식별자)를 사용하는 경우 드라이버는 초기 비동기 호출에 필요한 정보를 저장하고 전체 비동기 작업이 완료되기 전에 저장된 값을 사용해야 합니다. 일반적으로 SQLDriver커넥트, SQL커넥트 또는 SQLBrowse커넥트만 이러한 종류의 정보를 사용해야 합니다.