Unterschied zwischen @H und @H [0]

8

ich habe

 var H: array of THandle;

Dann erstelle ich in einer Schleife mehrere Threads, ordne den Elementen von H Thread-Handles zu und warte darauf. Das Übergeben von @H [0] als 2. Parameter an WFMO unten funktioniert.

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

Das Übergeben von @H wie unten schlägt jedoch mit WAIT_FAILED fehl. GetLastError gibt "Ungültiges Handle" zurück.

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

Warum unterscheidet sich @H von @H [0]?

Nani
quelle

Antworten:

8
  1. Da es sich um ein dynamisches Array handelt, Hist es bereits ein Zeiger und zeigt auf das erste Element
  2. @H[0]ist dasselbe wie H- Zeiger auf das erste Element
  3. und jetzt @Hist gleich @@H[0]- Zeiger auf Zeiger auf das erste Element.
zed
quelle
Vielen Dank. Wenn also H als deklariert H: array[0..10] of THandlewürde, wären @H und @H [0] vermutlich gleich. Ich kann es überprüfen.
Nani
@Nani Ja, wenn Hes sich um ein statisches Array handelt , müssen Sie seine Adresse über den @Operator abrufen und sind dann @Hgleich @H[0].
Zed
Sie können auch POINTER (H) verwenden, um einen Zeiger auf das erste Element des dynamischen Arrays zu erhalten.
HeartWare