Diferença entre @H e @H [0]

8

eu tenho

 var H: array of THandle;

então, em um loop, crio vários threads, atribuo identificadores de thread aos elementos de H e os espero. Passar @H [0] como o segundo parâmetro para o WFMO abaixo funciona.

WaitForMultipleObjects(Length(H), @H[0], True, INFINITE) <-- Works

Mas passar @H como abaixo falha com WAIT_FAILED. GetLastError retorna "Identificador inválido".

WaitForMultipleObjects(Length(H), @H, True, INFINITE)  <--- Fails.

Por que @H é diferente de @H [0]?

Nani
fonte

Respostas:

8
  1. Por ser uma matriz dinâmica, Hjá é um ponteiro e aponta para o primeiro elemento, portanto
  2. @H[0]é o mesmo que H- ponteiro para o primeiro elemento
  3. e agora @Hé igual a @@H[0]- ponteiro para ponteiro para o primeiro elemento.
zed
fonte
Obrigado. Portanto, se H fosse declarado como H: array[0..10] of THandleentão @H e @H [0] seriam os mesmos, suponho. Eu posso verificar.
Nani
@ Nani Sim, se Hfor um array estático , você precisará obter o endereço via @operador e, em seguida, @Hserá igual a @H[0].
zed
Você também pode usar o POINTER (H) para obter um ponteiro para o primeiro elemento da matriz dinâmica.
HeartWare