ibm-information-center/dist/eclipse/plugins/i5OS.ic.apis_5.4.0.1/users_19.htm

268 lines
8.5 KiB
HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Copyright" content="Copyright (c) 2006 by IBM Corporation">
<title>pthread_extendedjoin_np()--Wait for Thread with Extended Options</title>
<!-- All rights reserved. Licensed Materials Property of IBM -->
<!-- US Government Users Restricted Rights -->
<!-- Use, duplication or disclosure restricted by -->
<!-- GSA ADP Schedule Contract with IBM Corp. -->
<!-- Begin Header Records ========================================== -->
<!-- NETMG2 SCRIPT A converted by B2H R4.1 (346) (CMS) by HOLTJM at -->
<!-- RCHVMW2 on 29 Jan 1999 at 10:01:37 -->
<!--File Edited November 2001 -->
<!--End Header Records -->
<link rel="stylesheet" type="text/css" href="../rzahg/ic.css">
</head>
<body>
<!-- Java sync-link -->
<script language="Javascript" src="../rzahg/synch.js" type="text/javascript">
</script>
<a name="Top_Of_Page"></a>
<h2>pthread_extendedjoin_np()--Wait for Thread with Extended Options</h2>
<div class="box" style="width: 70%;">
<br>
&nbsp;&nbsp;Syntax:
<pre>
#include &lt;pthread.h&gt;
int pthread_extendedjoin_np(pthread_t thread, void **status,
pthread_joinoption_np_t *options);
</pre>
&nbsp;&nbsp;Service Program Name: QP0WPTHR<br>
<!-- iddvc RMBR -->
<br>
&nbsp;&nbsp;Default Public Authority: *USE <br>
<!-- iddvc RMBR -->
<br>
&nbsp;&nbsp;Threadsafe: Yes<br>
<!-- iddvc RMBR -->
<br>
&nbsp;&nbsp;Signal Safe: No<br>
<!-- iddvc RMBR -->
<br>
</div>
<p>The <strong>pthread_extendedjoin_np</strong>() function waits for a thread
to terminate, optionally detaches the thread, then returns the threads exit
status.</p>
<p>If the <em>options</em> parameter is specified as <strong>NULL</strong> or
the contents of the <em>pthread_joinoption_np_t</em> structure represented by
<em>options</em> parameter is binary 0, then the behavior of
<strong>pthread_extendedjoin_np</strong>() is equivalent to
<strong>pthread_join</strong>().</p>
<p>The <em>deltatime</em> field of the <em>options</em> parameter can be used
to specify the amount of elapsed time to wait before the wait times out. If the
wait times out, the <strong>ETIMEDOUT</strong> error is returned and the thread
is not detached. For an infinite wait, specify a seconds value of 0, and a
nanoseconds value of 0.</p>
<p>The <em>leaveThreadAllocated</em> field of the <em>options</em> parameter
can be used to specify that the <strong>pthread_extendedjoin_np</strong>()
function should NOT implicitly detach the thread when the join completes
successfully. If the leaveThreadAllocated option is used, the thread should
later be detached using <strong>pthread_join</strong>(),
<strong>pthread_detach</strong>(), or
<strong>pthread_extendedjoin_np</strong>() without specifying the
<em>leaveThreadAllocated</em> option.</p>
<p>The reserved fields of the <em>options</em> parameter are for use by
possible future extensions to <strong>pthread_extendedjoin_np</strong>(). If
any reserved fields of the <em>options</em> parameter are not zero, the
<strong>EINVAL</strong> error is returned.</p>
<p>If the <em>status</em> parameter is <strong>NULL</strong>, the threads exit
status is not returned.</p>
<p>The meaning of the threads exit status (value returned to the
<em>status</em> memory location) is determined by the application except for
the following conditions:</p>
<ol>
<li>When the thread has been canceled using <strong>pthread_cancel</strong>(),
the exit status of <strong>PTHREAD_CANCELED</strong> is made available.</li>
<li>When the thread has been terminated as a result of an unhandled i5/OS
exception, operator intervention, or other proprietary i5/OS mechanism, the
exit status of <strong>PTHREAD_EXCEPTION_NP</strong> is made available.</li>
</ol>
<p>Eventually, you should call <strong>pthread_join</strong>(),
<strong>pthread_detach</strong>() or <strong>pthread_extendedjoin_np</strong>()
without specifying the <em>leaveThreadAllocated</em> option for every thread
that is created joinable (with a detach state of
<strong>PTHREAD_CREATE_JOINABLE</strong>) so that the system can reclaim all
resources associated with the thread. Failure to join to or detach joinable
threads causes memory and other resource leaks until the process ends.</p>
<br>
<h3>Authorities and Locks</h3>
<p>None.</p>
<br>
<h3>Parameters</h3>
<dl>
<dt><strong>thread</strong></dt>
<dd>(Input) Pthread handle to the target thread<br><br></dd>
<dt><strong>status</strong></dt>
<dd>(Input/Output) Address of the variable to receive the thread's exit
status<br><br></dd>
<dt><strong>options</strong></dt>
<dd>(Input) Address of the join options structure specifying optional behavior
of this API.</dd>
</dl>
<br>
<h3>Return Value</h3>
<dl>
<dt><strong>0</strong></dt>
<dd><strong>pthread_extendedjoin_np</strong>() was successful.<br><br></dd>
<dt><strong>value</strong></dt>
<dd><strong>pthread_extendedjoin_np</strong>() was not successful.
<em>value</em> is set to indicate the error condition.</dd>
</dl>
<br>
<h3>Error Conditions</h3>
<p>If <strong>pthread_extendedjoin_np</strong>() was not successful, the error
condition returned usually indicates one of the following errors. Under some
conditions, the value returned could indicate an error other than those listed
here.</p>
<dl>
<dt><em>[EINVAL]</em></dt>
<dd><p>The value specified for the argument is not correct.</p></dd>
<dt><em>[ESRCH]</em></dt>
<dd><p>The thread specified could not be found.</p></dd>
<dt><em>[ETIMEDOUT]</em></dt>
<dd><p>The time specified in the <em>deltatime</em> field of the <em>options</em>
parameter elapsed without the target thread terminating.</p></dd>
</dl>
<br>
<h3>Related Information</h3>
<ul>
<li>The &lt;<strong>pthread.h</strong>&gt; header file. See <a href=
"rzah4hed.htm">Header files for Pthread functions</a>.<br><br></li>
<li><a href="users_16.htm">pthread_detach()</a>--Detach Thread<br><br></li>
<li><a href="users_18.htm">pthread_exit()</a>--Terminate Calling Thread<br><br></li>
<li><a href="users_25.htm">pthread_join()</a>--Wait for and Detach Thread<br><br></li>
<li><a href="users_26.htm">pthread_join_np()</a>--Wait for Thread to End</li>
</ul>
<br>
<h3>Example</h3>
<p>See <a href="../apiref/aboutapis.htm#codedisclaimer">Code disclaimer information</a>
for information pertaining to code examples.</p>
<pre>
#define _MULTI_THREADED
#include &lt;pthread.h&gt;
#include &lt;unistd.h&gt;
#include &lt;string.h&gt;
#include &lt;errno.h&gt;
#include &lt;stdio.h&gt;
#include "check.h"
static void *thread(void *parm)
{
printf("Entered thread\n");
sleep(10);
printf("Ending thread\n");
return __VOID(42);
}
int main (int argc, char *argv[])
{
pthread_joinoption_np_t joinoption;
void *status;
int rc;
pthread_t t;
printf("Entering testcase %s\n", argv[0]);
printf("Create thread using attributes that allow join\n");
rc = pthread_create(&amp;t, NULL, thread, NULL);
checkResults("pthread_create()\n", rc);
memset(&amp;joinoption, 0, sizeof(pthread_joinoption_np_t));
joinoption.deltatime.tv_sec = 3;
joinoption.leaveThreadAllocated = 1;
printf("Join to the thread, timeout in 3 seconds, no implicit detach\n");
rc = pthread_extendedjoin_np(t, &amp;status, &amp;joinoption);
if (rc != ETIMEDOUT) {
printf("Join did not timeout as expected! rc=%d\n", rc);
exit(1);
}
/* Call pthread_extendedjoin_np the same as a normal */
/* pthread_join() call. */
/* i.e. Implicit Detach is done, and Infinite wait */
printf("Normal join to the thread\n");
rc = pthread_extendedjoin_np(t, &amp;status, NULL);
checkResults("pthread_extendedjoin_np(no-options)\n", rc);
if (__INT(status) != 42) {
printf("Got the incorrect thread status!\n");
exit(1);
}
printf("Main completed\n");
return(0);
}
</pre>
<p><strong>Output</strong></p>
<pre>
Entering testcase QP0WTEST/TPJOINE0
Create thread using attributes that allow join
Join to the thread, timeout in 3 seconds, no implicit detach
Entered thread
Normal join to the thread
Ending thread
Main completed
</pre>
<br>
<hr>
API introduced: V4R3
<hr>
<center>
<table cellpadding="2" cellspacing="2">
<tr align="center">
<td valign="middle" align="center"><a href="#Top_Of_Page">Top</a> | <a href=
"rzah4mst.htm">Pthread APIs</a> | <a href="aplist.htm">APIs by
category</a></td>
</tr>
</table>
</center>
</body>
</html>