функция обратного вызова PFND3DDDI_SETASYNCCALLBACKSCB (d3dumddi.h)

Функция pfnSetAsyncCallbacksCb уведомляет среду выполнения Microsoft Direct3D о том, будет ли среда выполнения запускать или прекращать прием вызовов функций обратного вызова среды выполнения из рабочего потока.

Синтаксис

PFND3DDDI_SETASYNCCALLBACKSCB Pfnd3dddiSetasynccallbackscb;

HRESULT Pfnd3dddiSetasynccallbackscb(
  HANDLE hDevice,
  BOOL Enable
)
{...}

Параметры

hDevice

Дескриптор устройства отображения (графический контекст).

Enable

Логическое значение, указывающее, будет ли среда выполнения запускать или прекращать прием вызовов функций обратного вызова среды выполнения из рабочего потока. Значение TRUE указывает, что среда выполнения начнет получать вызовы своих функций обратного вызова из рабочего потока; Значение FALSE указывает, что среда выполнения перестанет получать вызовы своих функций обратного вызова из рабочего потока.

Возвращаемое значение

pfnSetAsyncCallbacksCb возвращает одно из следующих значений:

Код возврата Описание
S_OK Среда выполнения Direct3D успешно уведомлена.
E_INVALIDARG Параметры были проверены и определены как неверные.

Эта функция также может возвращать другие значения HRESULT.

Комментарии

Если драйвер отображения пользовательского режима реализует собственные многопроцессорные оптимизации (то есть драйвер создает рабочий поток и обрабатывает команды в этом потоке), драйвер должен вызвать pfnSetAsyncCallbacksCb , чтобы уведомить среду выполнения Direct3D о том, будет ли среда выполнения запускать или прекращать прием вызовов функций обратного вызова среды выполнения из рабочего потока. Кроме того, такие драйверы не должны реализовывать функции LockAsync, UnlockAsync и Rename . Это гарантирует, что среда выполнения не попытается использовать собственные оптимизации с несколькими процессорами.

Драйвер отображения пользовательского режима может вызывать pfnSetAsyncCallbacksCb только в потоке приложения main (т. е. потоке, который вызвал драйвер). Рабочий поток драйвера не может вызвать pfnSetAsyncCallbacksCb. В любой момент времени в любой функции обратного вызова среды выполнения может выполняться только один поток, ссылающийся на определенное устройство отрисовки.

Прежде чем драйвер отображения пользовательского режима вызывает любую из функций обратного вызова среды выполнения в потоке, отличном от потока приложения main, драйвер должен передать true параметру Enable в вызове pfnSetAsyncCallbacksCb. Прежде чем драйвер отображения пользовательского режима вызывает любую из функций обратного вызова среды выполнения в потоке приложения main, драйвер должен передать значение FALSE параметру Enable в вызове pfnSetAsyncCallbacksCb.

В реализации Flush для каждого устройства отрисовки драйвер вызывает pfnSetAsyncCallbacksCb и передает значение FALSE параметру Enable .

Когда драйвер передает значение TRUE параметру Enable в вызове pfnSetAsyncCallbacksCb, среда выполнения переводит себя в состояние, в котором она не сразу реагирует на ситуации потери устройства в функциях обратного вызова. Вместо этого, когда среда выполнения обнаруживает устройство, потерянное в функции обратного вызова в этом состоянии, она задает бит, указывающий на то, что произошло событие. Когда драйвер передает значение FALSE параметру Enable в вызове pfnSetAsyncCallbacksCb, среда выполнения проверяет бит, чтобы определить, произошла ли потеря устройства. Если бит задан, среда выполнения выполняет стандартную обработку потери устройства. После этого драйвер больше не будет получать большинство вызовов своих функций из среды выполнения.

Только версии среды выполнения DirectX 9 и DirectX 9L поддерживают pfnSetAsyncCallbacksCb. DirectX 10 и более поздних версий среды выполнения устанавливают для элемента pfnSetAsyncCallbacksCb структуры D3DDDI_DEVICECALLBACKSзначение NULL , когда среда выполнения вызывает функцию CreateDevice(D3D10) драйвера отображения пользовательского режима для создания устройства отрисовки.

Примечание Версии DirectX, предшествующие 9, не поддерживают многопроцессорную оптимизацию.
 
Драйверы могут вызывать функции обратного вызова среды выполнения только из рабочего потока, если среда выполнения ранее задала член pfnSetAsyncCallbacksCb D3DDDI_DEVICECALLBACKS значение, отличное от NULL , в вызове функции CreateDevice драйвера.

Требования

Требование Значение
Минимальная версия клиента Доступно в Windows Vista и более поздних версиях операционных систем Windows.
Целевая платформа Персональный компьютер
Верхняя часть d3dumddi.h (включая D3dumddi.h)

См. также раздел

CreateDevice

CreateDevice(D3D10)

D3DDDI_DEVICECALLBACKS

Очистка

LockAsync

Переименование

UnlockAsync