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.