Поделиться через


Функция QueueUserAPC2 (processthreadsapi.h)

Добавляет объект асинхронного вызова процедур пользовательского режима (APC) в очередь APC указанного потока.

Синтаксис

BOOL QueueUserAPC2(
  PAPCFUNC             ApcRoutine,
  HANDLE               Thread,
  ULONG_PTR            Data,
  QUEUE_USER_APC_FLAGS Flags
);

Параметры

ApcRoutine

Указатель на функцию APC, предоставляемую приложением, которая вызывается, когда указанный поток выполняет операцию ожидания с оповещением. Дополнительные сведения см. в разделе APCProc.

Для специальных APC пользовательского режима ожидание с оповещением не требуется. Дополнительные сведения о специальных ПТР пользовательского режима см. в разделе Примечания .

Thread

Дескриптор потока. Дескриптор должен иметь разрешение на доступ THREAD_SET_CONTEXT . Дополнительные сведения см. в разделе Безопасность объектов синхронизации и права доступа.

Data

Одно значение, передаваемое функции APC, на которую указывает параметр ApcRoutine .

Flags

Значение из перечисления QUEUE_USER_APC_FLAGS , которое изменяет поведение APC в пользовательском режиме.

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

Если функция выполняется успешно, возвращается ненулевое значение.

Если функция выполняется неудачно, возвращается нулевое значение. Дополнительные сведения об ошибке можно получить, вызвав GetLastError.

Комментарии

Обычные APC в пользовательском режиме выполняются только в том случае, если целевой поток находится в состоянии предупреждения. Дополнительные примечания о обычных APC пользовательского режима см. в разделе Функция QueueUserAPC .

Специальные APC в пользовательском режиме всегда выполняются, даже если целевой поток не находится в состоянии предупреждения. Например, если целевой поток в настоящее время выполняет код в пользовательском режиме или целевой поток в настоящее время выполняет оповещенное ожидание, целевой поток будет немедленно прерван для выполнения APC. Если целевой поток выполняет системный вызов или выполняет ожидание, не допускающее оповещений, APC будет выполняться после завершения системного вызова или ожидания без предупреждения (ожидание не прерывается).

Так как выполнение специального пользовательского режима APC не синхронизировано с целевым потоком, необходимо соблюдать особую осторожность (помимо обычных требований к многопоточности и синхронизации). Например, при получении любых блокировок прерванный целевой поток может уже владеть блокировкой или находиться в процессе получения или снятия блокировки. Кроме того, поскольку нет средств для блокировки потока от получения специальных ПТР пользовательского режима, специальный APC пользовательского режима может быть выполнен в целевом потоке, который уже выполняет специальный APC пользовательского режима.

В настоящее время специальные APC пользовательского режима поддерживаются только в собственных архитектурах, а не при выполнении в WoW.

Требования

Требование Значение
Минимальная версия клиента Windows 11 (сборка 22000)
Минимальная версия сервера Windows Server 2022 (сборка 20348)
Целевая платформа Windows
Header processthreadsapi.h (включая Windows.h)
Библиотека Kernel32.lib
DLL Kernel32.dll