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

234 lines
6.4 KiB
HTML
Raw Normal View History

2024-04-02 14:02:31 +00:00
<!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_getcancelstate_np()--Get Cancel State</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_getcancelstate_np()--Get Cancel State</h2>
<div class="box" style="width: 60%;">
<br>
&nbsp;&nbsp;Syntax:
<pre>
#include &lt;pthread.h&gt;
int pthread_getcancelstate_np(int *cancelState);
</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_getcancelstate_np</strong>() function gets the current
cancel <em>state</em> of the thread. Cancel state is either
PTHREAD_CANCEL_ENABLE or PTHREAD_CANCEL_DISABLE. For more information on
cancelability, see <a href="users_38.htm">Thread cancellation APIs</a>.</p>
<p>When cancelability is disabled, all cancels are held pending in the target
thread until the thread changes the cancelability. When cancelability is
deferred, all cancels are held pending in the target thread until the thread
changes the cancelability, calls a function that is a cancellation point, or
calls <strong>pthread_testcancel</strong>(), thus creating a cancellation
point. When cancelability is asynchronous, all cancels are acted upon
immediately, interrupting the thread with its processing.</p>
<p><strong>Notes:</strong></p>
<ol>
<li>Your application should not use asynchronous thread cancellation through the
<strong>PTHREAD_CANCEL_ASYNCHRONOUS</strong> option of <strong>
pthread_setcanceltype</strong>(). See the common user errors section of this
document for more information.</li>
<li>This function is not portable.</li>
</ol>
<br>
<h3>Authorities and Locks</h3>
<p>None.</p>
<br>
<h3>Parameters</h3>
<dl>
<dt><strong>cancelstate</strong></dt>
<dd>(Output) Address of the variable to receive the cancel state.</dd>
</dl>
<br>
<h3>Return Value</h3>
<dl>
<dt><strong>0</strong></dt>
<dd><strong>pthread_getcancelstate_np</strong>() was successful.</dd>
<dt><strong>value</strong></dt>
<dd><strong>pthread_getcancelstate_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_getcancelstate</strong>_np() 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>.<br><br></li>
<li><a href="users_39.htm">pthread_cancel()</a>--Cancel Thread<br><br></li>
<li><a href="users_18.htm">pthread_exit()</a>--Terminate Calling Thread<br><br></li>
<li><a href="users_44.htm">pthread_setcancelstate()</a>--Set Cancel State<br><br></li>
<li><a href="users_45.htm">pthread_setcanceltype()</a>--Set Cancel Type<br><br></li>
<li><a href="users_46.htm">pthread_testcancel()</a>--Create Cancellation
Point</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;stdio.h&gt;
#include &lt;except.h&gt;
#include &lt;setjmp.h&gt;
#include "check.h"
void showCancelState(void);
int threadStatus=42;
void showCancelState(void)
{
int state, rc;
rc = pthread_getcancelstate_np(&amp;state);
checkResults("pthread_getcancelstate_np()\n", rc);
printf("current cancel state is %d\n", state);
}
void cleanupHandler2(void *p)
{
printf("In cancellation cleanup handler\n");
showCancelState();
return;
}
void *threadfunc(void *parm)
{
int rc, old;
printf("Inside secondary thread\n");
showCancelState();
pthread_cleanup_push(cleanupHandler2, NULL);
threadStatus = 0;
printf("Calling pthread_exit() will allow cancellation "
"cleanup handlers to run\n");
pthread_exit(__VOID(threadStatus));
pthread_cleanup_pop(0);
return __VOID(-1);
}
int main(int argc, char **argv)
{
pthread_t thread;
int rc=0;
char c;
void *status;
printf("Enter Testcase - %s\n", argv[0]);
printf("Create thread that will demonstrate pthread_getcancelstate_np()\n");
rc = pthread_create(&amp;thread, NULL, threadfunc, NULL);
checkResults("pthread_create()\n", rc);
rc = pthread_join(thread, &amp;status);
checkResults("pthread_join()\n", rc);
if (__INT(status) != threadStatus) {
printf("Got an unexpected return status from the thread!\n");
exit(1);
}
printf("Main completed\n");
return 0;
}
</pre>
<p><strong>Output:</strong></p>
<pre>
Enter Testcase - QP0WTEST/TPGETCANS0
Create thread that will demonstrate pthread_getcancelstate_np()
Inside secondary thread
current cancel state is 0
Calling pthread_exit() will allow cancellation cleanup handlers to run
In cancellation cleanup handler
current cancel state is 1
Main completed
</pre>
<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>