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

220 lines
5.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_delay_np()--Delay Thread for Requested Interval</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_delay_np()--Delay Thread for Requested Interval</h2>
<div class="box" style="width: 60%;">
<br>
&nbsp;&nbsp;Syntax:
<pre>
#include &lt;pthread.h&gt;
#include &lt;time.h&gt;
int pthread_delay_np(const struct timespec *deltatime);
</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: Yes<br>
<!-- iddvc RMBR -->
<br>
</div>
<p>The <strong>pthread_delay_np</strong>() function causes the calling thread
to delay for the deltatime specified.</p>
<p>Although time is specified in seconds and nanoseconds, the system has
approximately millisecond granularity. Due to scheduling and priorities, the
amount of time you actually wait might be slightly more or less than the amount
of time specified.</p>
<p>During the time that the thread is blocked in
<strong>pthread_delay_np</strong>(), any asynchronous signals that are
delivered to the thread have their actions taken. After the signal action (such
as running a signal handler), the wait resumes if the specified interval has
not yet elapsed.</p>
<p>The <strong>pthread_delay_np</strong>() function is a cancellation
point.</p>
<p><strong>Note:</strong>This function is not portable.</p>
<br>
<h3>Authorities and Locks</h3>
<p>None.</p>
<br>
<h3>Parameters</h3>
<dl>
<dt><strong>interval</strong></dt>
<dd>(Input) Address of the timespec structure containing the interval to
wait</dd>
</dl>
<br>
<h3>Return Value</h3>
<dl>
<dt><strong>0</strong></dt>
<dd><strong>pthread_delay_np</strong>() was successful.<br><br></dd>
<dt><strong>value</strong></dt>
<dd><strong>pthread_delay_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_delay_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>
</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>.</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;stdio.h&gt;
#include &lt;qp0z1170.h&gt;
#include &lt;time.h&gt;
#include &lt;pthread.h&gt;
#include "check.h"
#define NTHREADS 5
void *threadfunc(void *parm)
{
int rc;
struct timespec ts = {0, 0};
/* 5 and 1/2 seconds */
ts.tv_sec = 5;
ts.tv_nsec = 500000000;
printf("Thread blocked\n");
rc = pthread_delay_np(&amp;ts);
if (rc != 0) {
printf("pthread_delay_np() - return code %d\n", rc);
return (void*)&amp;rc;
}
printf("Wait timed out!\n");
return NULL;
}
int main(int argc, char **argv)
{
int rc=0;
int i;
pthread_t threadid[NTHREADS];
void *status;
int fail=0;
printf("Enter Testcase - %s\n", argv[0]);
printf("Create %d threads\n", NTHREADS);
for(i=0; i&lt;NTHREADS; ++i) {
rc = pthread_create(&amp;threadid[i], NULL, threadfunc, NULL);
checkResults("pthread_create()\n", rc);
}
printf("Wait for threads and cleanup\n");
for (i=0; i&lt;NTHREADS; ++i) {
rc = pthread_join(threadid[i], &amp;status);
checkResults("pthread_join()\n", rc);
if (status != NULL) {
fail = 1;
}
}
if (fail) {
printf("At least one thread failed!\n");
exit(1);
}
printf("Main completed\n");
return 0;
}
</pre>
<p><strong>Output:</strong></p>
<pre>
Enter Testcase - QP0WTEST/TPDLY0
Create 5 threads
Thread blocked
Thread blocked
Thread blocked
Thread blocked
Wait for threads and cleanup
Thread blocked
Wait timed out!
Wait timed out!
Wait timed out!
Wait timed out!
Wait timed out!
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>