@H 和 @H[0] 的区别

Nan*_*ani 8 delphi pointers waitformultipleobjects

我有

 var H: array of THandle;
Run Code Online (Sandbox Code Playgroud)

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

WaitForMultipleObjects(Length(H), @H[0], True, INFINITE) <-- Works
Run Code Online (Sandbox Code Playgroud)

但是传递@H 如下失败,WAIT_FAILED。GetLastError 返回“无效句柄”。

WaitForMultipleObjects(Length(H), @H, True, INFINITE)  <--- Fails.
Run Code Online (Sandbox Code Playgroud)

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

zed*_*zed 8

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