This is the mail archive of the
mailing list for the pthreas-win32 project.
RE: Asynchronous cancel
- To: 'Ross Johnson' <email@example.com>, Rajiv K Shukla <firstname.lastname@example.org>
- Subject: RE: Asynchronous cancel
- From: "Bossom, John" <John.Bossom@Cognos.COM>
- Date: Thu, 12 Aug 1999 09:54:38 -0400
- Cc: email@example.com
To elaborate on Ross' response, pthreadCancelableWait and
pthreadCancelableTimedWait provide developers with a low level
"hook" into the win32-pthread cancellation mechanism.
The cancel mechanism is implemented using a Win32 Event.
pthreadCancelableWait blocks waiting on both the handle you
provide AND the cancel event using WaitForMultipleObjects.
You can leverage these two routines to gain the asynchronous
behaviour you seek provided that you only block on Windows
Ideally, this mechanism should be used under the sheets,
so to speak, to implement the POSIX cancellation points in the
C run-time library.
Hope this helps...
From: Ross Johnson [mailto:firstname.lastname@example.org]
Sent: Thursday, August 12, 1999 7:29 AM
To: Rajiv K Shukla
Subject: Re: Asynchronous cancel
On Tue, 10 Aug 1999, Rajiv K Shukla wrote:
> Hello All,
> Sorry if the question has been asked before. We're trying to see if we
> could use the pthreads-win32 package to port our code to NT. It's been
> fine so far but we have hit a snag. It seems that
> pthread_setcanceltype doesn't really do anything. It sets an integer
> variable cancelType (which is part of the pthread_t structure) but the
> flag is used no where. Looks like the only way to cancel a thread is
> to call pthread_cancel and within the cancelled thread call
> pthread_testcancel. But we'd like to be able to cancel a thread
> asynchronously, e.g one of our thread sleeps for a configurable amount
> of time and it could be set pretty high, 1 hour, or 10 hours, or
> whatever. If within the thread I need to call pthread_testcancel in
> order to be cancelled then it's a problem. We'd have to wait that much
> time before we're even able to call pthread_testcancel.
> I'd appreciate any suggestion that you may have.
At present there is no way in general to asynchronously cancel a
thread. The best device on offer in the package is the
pthreadCancelableWait() and pthreadCancelableTimedWait() functions
(both non-POSIX and non-portable). See the code and comments in
misc.c. They respond to pthread_cancel().
| Ross Johnson | | E-Mail: email@example.com
| Info Sciences and Eng|___|
| University of Canberra | FAX: +61 6 2015227
| PO Box 1 |
| Belconnen ACT 2616 | WWW: http://willow.canberra.edu.au/~rpj/
| AUSTRALIA |