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]?

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.

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.