109 lines
4.6 KiB
HTML
109 lines
4.6 KiB
HTML
<?xml version="1.0" encoding="UTF-8"?>
|
|
<!DOCTYPE html
|
|
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
<html lang="en-us" xml:lang="en-us">
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
<meta name="security" content="public" />
|
|
<meta name="Robots" content="index,follow" />
|
|
<meta http-equiv="PICS-Label" content='(PICS-1.1 "http://www.icra.org/ratingsv02.html" l gen true r (cz 1 lz 1 nz 1 oz 1 vz 1) "http://www.rsac.org/ratingsv01.html" l gen true r (n 0 s 0 v 0 l 0) "http://www.classify.org/safesurf/" l gen true r (SS~~000 1))' />
|
|
<meta name="DC.Type" content="reference" />
|
|
<meta name="DC.Title" content="Example: Cancel a thread in a Pthread program" />
|
|
<meta name="abstract" content="This example shows a Pthread program canceling a long-running thread." />
|
|
<meta name="description" content="This example shows a Pthread program canceling a long-running thread." />
|
|
<meta name="DC.Relation" scheme="URI" content="rzahwcanco.htm" />
|
|
<meta name="copyright" content="(C) Copyright IBM Corporation 1998, 2006" />
|
|
<meta name="DC.Rights.Owner" content="(C) Copyright IBM Corporation 1998, 2006" />
|
|
<meta name="DC.Format" content="XHTML" />
|
|
<meta name="DC.Identifier" content="rzahwe12-e12rx" />
|
|
<meta name="DC.Language" content="en-us" />
|
|
<!-- 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. -->
|
|
<link rel="stylesheet" type="text/css" href="./ibmdita.css" />
|
|
<link rel="stylesheet" type="text/css" href="./ic.css" />
|
|
<title>Example: Cancel a thread in a Pthread program</title>
|
|
</head>
|
|
<body id="rzahwe12-e12rx"><a name="rzahwe12-e12rx"><!-- --></a>
|
|
<!-- Java sync-link --><script language="Javascript" src="../rzahg/synch.js" type="text/javascript"></script>
|
|
<h1 class="topictitle1">Example: Cancel a thread in a Pthread program</h1>
|
|
<div><p>This example shows a Pthread program canceling a long-running thread.</p>
|
|
<div class="section"><div class="note"><span class="notetitle">Note:</span> By using the code examples, you agree to the terms of the <a href="codedisclaimer.htm">Code license and disclaimer information</a>.</div>
|
|
</div>
|
|
<div class="example"> <pre>/*
|
|
Filename: ATEST13.QCSRC
|
|
The output of this example is as follows:
|
|
Enter Testcase - LIBRARY/ATEST13
|
|
Create/start a thread
|
|
Wait a bit until we 'realize' the thread needs to be canceled
|
|
Thread: Entered
|
|
Thread: Looping or long running request
|
|
Thread: Looping or long running request
|
|
Thread: Looping or long running request
|
|
Wait for the thread to complete, and release its resources
|
|
Thread: Looping or long running request
|
|
Thread status indicates it was canceled
|
|
Main completed
|
|
*/
|
|
#define _MULTI_THREADED
|
|
#include <pthread.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <unistd.h>
|
|
#define checkResults(string, val) { \
|
|
if (val) { \
|
|
printf("Failed with %d at %s", val, string); \
|
|
exit(1); \
|
|
} \
|
|
}
|
|
|
|
void *theThread(void *parm)
|
|
{
|
|
printf("Thread: Entered\n");
|
|
while (1) {
|
|
printf("Thread: Looping or long running request\n");
|
|
pthread_testcancel();
|
|
sleep(1);
|
|
}
|
|
return NULL;
|
|
}
|
|
|
|
int main(int argc, char **argv)
|
|
{
|
|
pthread_t thread;
|
|
int rc=0;
|
|
void *status;
|
|
|
|
printf("Enter Testcase - %s\n", argv[0]);
|
|
|
|
printf("Create/start a thread\n");
|
|
rc = pthread_create(&thread, NULL, theThread, NULL);
|
|
checkResults("pthread_create()\n", rc);
|
|
|
|
printf("Wait a bit until we 'realize' the thread needs to be canceled\n");
|
|
sleep(3);
|
|
rc = pthread_cancel(thread);
|
|
checkResults("pthread_cancel()\n", rc);
|
|
|
|
printf("Wait for the thread to complete, and release its resources\n");
|
|
rc = pthread_join(thread, &status);
|
|
checkResults("pthread_join()\n", rc);
|
|
|
|
printf("Thread status indicates it was canceled\n");
|
|
if (status != PTHREAD_CANCELED) {
|
|
printf("Unexpected thread status\n");
|
|
}
|
|
|
|
printf("Main completed\n");
|
|
return 0;
|
|
}</pre>
|
|
</div>
|
|
</div>
|
|
<div>
|
|
<div class="familylinks">
|
|
<div class="parentlink"><strong>Parent topic:</strong> <a href="rzahwcanco.htm" title="The ability to end a thread externally allows you to cancel threads that run long requests before they are completed on their own. The methods available for canceling threads vary according to the threads API set that is used.">Cancel a thread</a></div>
|
|
</div>
|
|
</div>
|
|
</body>
|
|
</html> |