64 lines
7.4 KiB
HTML
64 lines
7.4 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="zh" dir="ltr" class="client-nojs" xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh">
|
|
<head><meta http-equiv="x-ua-compatible" content="ie=edge">
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
<title>std::jthread::request_stop</title>
|
|
<link rel="stylesheet" href="ext.css" />
|
|
<link rel="stylesheet" href="site_modules.css" />
|
|
</head>
|
|
<body class="mediawiki ltr sitedir-ltr ns-0 ns-subject page-cpp_thread_jthread_request_stop skin-cppreference2 action-view cpp-navbar">
|
|
<div id="cpp-content-base">
|
|
<div id="content"><a id="top"></a>
|
|
<h1 id="firstHeading" class="firstHeading"><span style="font-size:0.7em; line-height:130%">std::jthread::</span>request_stop</h1>
|
|
<div id="bodyContent">
|
|
<div id="contentSub"><span class="subpages">< <a href="cpp.html">cpp</a>‎ | <a href="cpp-thread.html">thread</a>‎ | <a href="cpp-thread-jthread.html">jthread</a></span></div>
|
|
<div id="mw-content-text" lang="zh" dir="ltr" class="mw-content-ltr" xml:lang="zh">
|
|
<table class="t-dcl-begin">
|
|
<tbody>
|
|
<tr class="t-dcl t-since-cxx20">
|
|
<td>
|
|
<div><span class="mw-geshi cpp source-cpp"><span class="kw4">bool</span> request_stop<span class="br0">(</span><span class="br0">)</span> <span class="kw1">noexcept</span><span class="sy4">;</span></span></div>
|
|
</td>
|
|
<td class="t-dcl-nopad"></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20 起)</span></td>
|
|
</tr>
|
|
<tr class="t-dcl-sep">
|
|
<td></td>
|
|
<td></td>
|
|
<td></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p>若内部停止状态尚未被请求停止,则对它发出停止请求。</p>
|
|
<p>原子地作出确定,而若请求了停止,则原子地更新共享状态以避免竞争条件,使得:</p>
|
|
<ul>
|
|
<li>能在同一共享状态的 <span class="t-lc">std::stop_token</span> 与 <span class="t-lc">std::stop_source</span> 上同时调用 <span class="t-c"><span class="mw-geshi cpp source-cpp">stop_requested<span class="br0">(</span><span class="br0">)</span></span></span> 与 <span class="t-c"><span class="mw-geshi cpp source-cpp">stop_possible<span class="br0">(</span><span class="br0">)</span></span></span></li>
|
|
<li>能从多个线程在同一 <code>jthread</code> 对象或与同一停止状态关联的其他 <span class="t-lc">std::stop_source</span> 对象上并发调用 <span class="t-c"><span class="mw-geshi cpp source-cpp">request_stop<span class="br0">(</span><span class="br0">)</span></span></span> ,而将只有一个线程实际进行停止请求</li>
|
|
</ul>
|
|
<p>然而,见注解节。</p>
|
|
<h3><span class="mw-headline" id=".E5.8F.82.E6.95.B0">参数</span></h3>
|
|
<p>(无)</p>
|
|
<h3><span class="mw-headline" id=".E8.BF.94.E5.9B.9E.E5.80.BC">返回值</span></h3>
|
|
<p>若调用做出停止请求则为 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw2">true</span></span></span> ,否则为 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw2">false</span></span></span> 。</p>
|
|
<h3><span class="mw-headline" id=".E5.90.8E.E6.9D.A1.E4.BB.B6">后条件</span></h3>
|
|
<p>对于由 <span class="t-c"><span class="mw-geshi cpp source-cpp">get_stop_token<span class="br0">(</span><span class="br0">)</span></span></span> 取得的 <span class="t-lc">std::stop_token</span> 或由 <span class="t-c"><span class="mw-geshi cpp source-cpp">get_stop_source<span class="br0">(</span><span class="br0">)</span></span></span> 取得的 <span class="t-lc">std::stop_source</span> , <span class="t-c"><span class="mw-geshi cpp source-cpp">stop_requested<span class="br0">(</span><span class="br0">)</span></span></span> 为 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw2">true</span></span></span> 。</p>
|
|
<h3><span class="mw-headline" id=".E6.B3.A8.E8.A7.A3">注解</span></h3>
|
|
<p>若 <span class="t-c"><span class="mw-geshi cpp source-cpp">request_stop<span class="br0">(</span><span class="br0">)</span></span></span> 发出停止请求(即返回 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw2">true</span></span></span> ),则将在发出 <span class="t-c"><span class="mw-geshi cpp source-cpp">request_stop<span class="br0">(</span><span class="br0">)</span></span></span> 的同一线程上同步调用对同一共享停止状态注册的任何 <span class="t-lc">std::stop_callbacks</span> 。若任何回调的调用经由异常退出,则调用 <span class="t-lc"><a href="cpp-error-terminate.html">std::terminate</a></span> 。</p>
|
|
<p>若已作出停止请求,则此函数返回 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw2">false</span></span></span> 。然而不保证正好对同一停止状态(成功)请求停止的另一线程或 <span class="t-lc">std::stop_source</span> 对象不仍然在调用 <span class="t-lc">std::stop_callback</span> 函数的中间。</p>
|
|
<p>若 <span class="t-c"><span class="mw-geshi cpp source-cpp">request_stop<span class="br0">(</span><span class="br0">)</span></span></span> 发出停止请求(即返回 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw2">true</span></span></span> ),则提醒所有用与 <code>jthread</code> 的内部停止状态关联的 <code>stop_token</code> 的可中断等待注册的、基类型为 <span class="t-lc"><a href="cpp-thread-condition_variable_any.html">std::condition_variable_any</a></span> 的条件变量。</p>
|
|
<h3><span class="mw-headline" id=".E7.A4.BA.E4.BE.8B">示例</span></h3>
|
|
<table class="metadata plainlinks ambox mbox-small-left ambox-notice" style="">
|
|
<tr>
|
|
<td class="mbox-empty-cell"></td>
|
|
<td class="mbox-text" style="">本节未完成<br />
|
|
原因:暂无示例</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
<div class="visualClear"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</body>
|
|
</html>
|