Compartilhar via


Função QueueUserAPC2 (processthreadsapi.h)

Adiciona um objeto APC ( chamada de procedimento assíncrono ) no modo de usuário à fila APC do thread especificado.

Sintaxe

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

Parâmetros

ApcRoutine

Um ponteiro para a função APC fornecida pelo aplicativo a ser chamada quando o thread especificado executa uma operação de espera alertável. Para obter mais informações, consulte APCProc.

Para APCs especiais do modo de usuário, uma espera alertável não é necessária. Consulte Comentários para obter mais informações sobre APCs especiais do modo de usuário.

Thread

Um identificador para o thread. O identificador deve ter THREAD_SET_CONTEXT permissão de acesso. Para obter mais informações, consulte Segurança do objeto de sincronização e direitos de acesso.

Data

Um único valor que é passado para a função APC apontada pelo parâmetro ApcRoutine .

Flags

Um valor de QUEUE_USER_APC_FLAGS enumeração que modifica o comportamento do APC no modo de usuário.

Valor retornado

Se a função for bem-sucedida, o valor retornado será diferente de zero.

Se a função falhar, o valor retornado será zero. Para obter informações de erro estendidas, chame GetLastError.

Comentários

AS APCs regulares do modo de usuário só serão executadas se o thread de destino estiver em um estado alertável. Consulte Função QueueUserAPC para obter comentários adicionais sobre APCs regulares do modo de usuário.

ApCs especiais no modo de usuário sempre são executadas, mesmo que o thread de destino não esteja em um estado alertável. Por exemplo, se o thread de destino estiver executando o código do modo de usuário ou se o thread de destino estiver executando uma espera alertável no momento, o thread de destino será interrompido imediatamente para execução do APC. Se o thread de destino estiver executando uma chamada do sistema ou executando uma espera não alertável, o APC será executado após a chamada do sistema ou a espera não alertável for concluída (a espera não é interrompida).

Como a execução do APC especial do modo de usuário não é sincronizada com o thread de destino, é necessário ter cuidado específico (além dos requisitos normais de multithreading e sincronização). Por exemplo, ao adquirir bloqueios, o thread de destino interrompido já pode ter o bloqueio ou estar em processo de aquisição ou liberação do bloqueio. Além disso, como não há recursos para impedir que um thread receba APCs especiais no modo de usuário, um APC especial no modo de usuário pode ser executado em um thread de destino que já esteja executando um APC especial no modo de usuário.

Atualmente, as APCs especiais do modo de usuário só têm suporte em arquiteturas nativas e não ao serem executadas em WoW.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 11 (Build 22000)
Servidor mínimo com suporte Windows Server 2022 (Build 20348)
Plataforma de Destino Windows
Cabeçalho processthreadsapi.h (inclua Windows.h)
Biblioteca Kernel32.lib
DLL Kernel32.dll