首页 > 解决方案 > @H 和 @H[0] 之间的区别

问题描述

我有

 var H: array of THandle;

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

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

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

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

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

标签: pointersdelphiwaitformultipleobjects

解决方案


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

推荐阅读