前言
在本章前文所述的各项等待操作中,线程阻塞的时间并不确定,但在实际应用中存在这样的需求:限制线程等待时间——在线程等待特定的一段时间后,开发者既可以向用户发出“该事件仍未完成”的提示,也可以接受由于用户放弃等待从而关闭线程的命令。
判断程序运行超时有两种方式:
- duration-based
该方式需要用户指定一段时间,例如30ms。 - absolute
该方式需要用户提供一个时间点,例如17:30:15.045987023 UTC on November 30, 2011。
大多数等待函数均支持这两种方式,处理duration-based
的后缀为_for
,处理absolute
的后缀为_until
。举例而言,std::condition_variable
的成员函数wait_for()
和wait_until()
。此外,这些函数具备2种重载,第一种重载形式等待着信号触发或虚假唤醒,另一种则在唤醒时检查谓词,并仅在结果为true
的情况下返回,或直接超时返回。更多相关信息可见本节末尾的图表。