Função CoDisableCallCancellation (combaseapi.h)

Desfaz a ação de uma chamada para CoEnableCallCancellation. Desabilita o cancelamento de chamadas síncronas no thread de chamada quando todas as chamadas para CoEnableCallCancellation são balanceadas por chamadas para CoDisableCallCancellation.

Sintaxe

HRESULT CoDisableCallCancellation(
  [in, optional] LPVOID pReserved
);

Parâmetros

[in, optional] pReserved

Esse parâmetro é reservado e deve ser NULL.

Valor retornado

Essa função pode retornar os valores de retorno padrão E_FAIL, E_INVALIDARG, E_OUTOFMEMORY e E_UNEXPECTED, bem como os valores a seguir.

Código de retorno Descrição
S_OK
O cancelamento da chamada foi desabilitado com êxito no thread.
CO_E_CANCEL_DISABLED
Houve chamadas mais bem-sucedidas para CoEnableCallCancellation no thread do que houve chamadas para CoDisableCallCancellation. O cancelamento ainda está habilitado no thread.

Comentários

Quando o cancelamento de chamada é habilitado em um thread, chamadas síncronas marshaladas desse thread para objetos no mesmo computador podem sofrer uma grave degradação de desempenho. Por padrão, as chamadas síncronas não podem ser canceladas, mesmo que um objeto cancele esteja disponível. Para habilitar o cancelamento de chamadas, você deve chamar CoEnableCallCancellation primeiro.

Quando o cancelamento de chamada estiver desabilitado, as tentativas de obter um ponteiro para um objeto de chamada falharão. Se o thread de chamada já tiver um ponteiro para um objeto de chamada, as chamadas nesse objeto falharão.

A menos que você queira habilitar o cancelamento de chamadas em um thread o tempo todo, você deve emparelhar chamadas para CoEnableCallCancellation com chamadas para CoDisableCallCancellation. O cancelamento de chamada será desabilitado somente se cada chamada bem-sucedida para CoEnableCallCancellation for balanceada por uma chamada bem-sucedida para CoDisableCallCancellation.

Uma chamada será cancelável ou não dependendo do estado do thread no momento em que a chamada foi feita. Posteriormente, habilitar ou desabilitar o cancelamento de chamadas não tem efeito em nenhuma chamada pendente no thread.

Se um thread não for inicializado e reinicializado por chamadas para CoUninitialize e CoInitialize, o cancelamento de chamada será desabilitado no thread, mesmo que ele tenha sido habilitado quando o thread não foi inicializado.

Requisitos

   
Cliente mínimo com suporte Windows 2000 Professional [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows 2000 Server [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho combaseapi.h (inclua Objbase.h)
Biblioteca Ole32.lib
DLL Ole32.dll

Confira também

CoEnableCallCancellation

ICancelMethodCalls