@H 和@H[0] 的区别

Difference between @H and @H[0]

我有

 var H: array of THandle;

然后在循环中创建多个线程,并将线程句柄分配给 H 的元素,然后等待它们。将 @H[0] 作为第二个参数传递给下面的 WFMO 是可行的。

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

但是如下传递 @H 失败 WAIT_FAILED。 GetLastError returns "Invalid Handle"。

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

为什么@H 与@H[0] 不同?

  1. 因为是动态数组,H已经是一个指针,指向第一个元素,所以
  2. @H[0]H 相同 - 指向第一个元素的指针
  3. 现在 @H 等于 @@H[0] - 指向第一个元素的指针。