Delphi `TWaitResult.wrIOCompletion`未记录在案。有人能提供使用技巧吗?

Delphi `TWaitResult.wrIOCompletion`未记录在案。有人能提供使用技巧吗?,delphi,Delphi,twairtresult.wrIOCompletion。有人知道它是何时和如何使用的吗 它仅在Windows上使用,THandleObject(及其子体TEvent,TSimpleEvent,TMutex,和TSemaphore)采用以下方法: 。创建对象时,将UseCOMWait设置为True,等待由Win32 API函数处理,如果报告了RPC\u S\u CALLPENDING,则返回wrIOCompletion。当UseCOMWait改为False时,等待由Win32 API函数1处理 w

twairtresult.wrIOCompletion
。有人知道它是何时和如何使用的吗

它仅在Windows上使用,
THandleObject
(及其子体
TEvent
TSimpleEvent
TMutex
,和
TSemaphore
)采用以下方法:

  • 。创建对象时,将
    UseCOMWait
    设置为True,等待由Win32 API函数处理,如果报告了
    RPC\u S\u CALLPENDING
    ,则返回
    wrIOCompletion
    。当
    UseCOMWait
    改为False时,等待由Win32 API函数1处理

  • <如果
    UseCOMWait
    参数为True并报告
    RPC\u S\u CALLPENDING
    ,或者
    UseCOMWait
    为False并报告
    WAIT\u IO\u COMPLETION
    ,则返回code>wrIOCompletion

  • 无论哪种方式,含义都是相同的2:

    等待被排队到线程的一个或多个用户模式异步过程调用(APC)结束

    有关APC队列的更多详细信息,请参阅MSDN:

    简言之,可报警I/O或APC操作允许用户定义的操作/函数在线程中排队,以便线程在安全状态下调用它以进行此类调用
    wrIOCompletion
    表示调用
    WaitFor/Multiple()
    的线程必须在超时时间过去之前停止等待,以便执行一个或多个排队的可报警/APC函数。线程必须再次调用
    WaitFor/Multiple()
    ,以完成对所需对象的等待3


    1:
    THandleObject.WaitFor()
    当前不处理
    WAIT\u IO\u COMPLETION
    (错误?)当
    UseCOMWait
    为false时。它将返回
    wrError
    (并且不会分配属性的值!)

    2:文档将
    RPC_S_CALLPENDING
    描述为“发出所需句柄的信号之前经过的超时时间”,但这将是
    RPC_E_timeout
    更合适的描述。(文档错误?)

    3:实际上,决不应发生
    wrIOCompletion
    ,因为从不使用
    COWAIT\u ALERTABLE
    标志调用:

    如果在dwFlags中设置了COWAIT_ALERTABLE标志,则WAIT_IO_COMPLETION的值表示等待由排队到线程的一个或多个用户模式异步过程调用(APC)结束

    并且在其
    bAlertable
    参数设置为True时从不调用:

    bAlertable[in]
    如果此参数为TRUE且线程处于等待状态,则当系统将I/O完成例程或APC排入队列,且线程运行该例程或函数时,函数返回。否则,函数不会返回,并且不会执行完成例程或APC函数

    触发
    wrIOCompletion
    结果需要这些条件。我已在中为此打开了错误报告:


  • 。创建对象时,将
    UseCOMWait
    设置为True,等待由Win32 API函数处理,如果报告了
    RPC\u S\u CALLPENDING
    ,则返回
    wrIOCompletion
    。当
    UseCOMWait
    改为False时,等待由Win32 API函数1处理

  • <如果
    UseCOMWait
    参数为True并报告
    RPC\u S\u CALLPENDING
    ,或者
    UseCOMWait
    为False并报告
    WAIT\u IO\u COMPLETION
    ,则返回code>wrIOCompletion

  • 无论哪种方式,含义都是相同的2:

    等待被排队到线程的一个或多个用户模式异步过程调用(APC)结束

    有关APC队列的更多详细信息,请参阅MSDN:

    简言之,可报警I/O或APC操作允许用户定义的操作/函数在线程中排队,以便线程在安全状态下调用它以进行此类调用
    wrIOCompletion
    表示调用
    WaitFor/Multiple()
    的线程必须在超时时间过去之前停止等待,以便执行一个或多个排队的可报警/APC函数。线程必须再次调用
    WaitFor/Multiple()
    ,以完成对所需对象的等待3


    1:
    THandleObject.WaitFor()
    当前不处理
    WAIT\u IO\u COMPLETION
    (错误?)当
    UseCOMWait
    为false时。它将返回
    wrError
    (并且不会分配属性的值!)

    2:文档将
    RPC_S_CALLPENDING
    描述为“发出所需句柄的信号之前经过的超时时间”,但这将是
    RPC_E_timeout
    更合适的描述。(文档错误?)

    3:实际上,决不应发生
    wrIOCompletion
    ,因为从不使用
    COWAIT\u ALERTABLE
    标志调用:

    如果在dwFlags中设置了COWAIT_ALERTABLE标志,则WAIT_IO_COMPLETION的值表示等待由排队到线程的一个或多个用户模式异步过程调用(APC)结束

    并且在其
    bAlertable
    参数设置为True时从不调用:

    bAlertable[in]
    如果此参数为TRUE且线程处于等待状态,则当系统将I/O完成例程或APC排入队列,且线程运行该例程或函数时,函数返回。否则,函数不会返回,并且不会执行完成例程或APC函数

    触发
    wrIOCompletion
    结果需要这些条件。我已经打开了一个bug rep