2002-08-02 23:57:46 +04:00
|
|
|
/*
|
|
|
|
* synergy -- mouse and keyboard sharing utility
|
|
|
|
* Copyright (C) 2002 Chris Schoeneman
|
|
|
|
*
|
|
|
|
* This package is free software; you can redistribute it and/or
|
|
|
|
* modify it under the terms of the GNU General Public License
|
|
|
|
* found in the file COPYING that should have accompanied this file.
|
|
|
|
*
|
|
|
|
* This package is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
*/
|
|
|
|
|
2001-10-06 18:13:28 +04:00
|
|
|
#ifndef XTHREAD_H
|
|
|
|
#define XTHREAD_H
|
|
|
|
|
2002-07-28 17:34:19 +04:00
|
|
|
//! Generic thread exception
|
2002-10-16 02:01:41 +04:00
|
|
|
/*!
|
|
|
|
Exceptions derived from this class are used by the multithreading
|
|
|
|
library to perform stack unwinding when a thread terminates. These
|
|
|
|
exceptions must always be rethrown by clients when caught.
|
|
|
|
*/
|
2001-10-06 18:13:28 +04:00
|
|
|
class XThread { };
|
|
|
|
|
2002-07-28 17:34:19 +04:00
|
|
|
//! Thread exception to exit
|
|
|
|
/*!
|
|
|
|
Thrown by CThread::exit() to exit a thread. Clients of CThread
|
|
|
|
must not throw this type but must rethrow it if caught (by
|
|
|
|
XThreadExit, XThread, or ...).
|
|
|
|
*/
|
2001-10-06 18:13:28 +04:00
|
|
|
class XThreadExit : public XThread {
|
2002-04-29 18:40:01 +04:00
|
|
|
public:
|
2002-07-28 17:34:19 +04:00
|
|
|
//! \c result is the result of the thread
|
2002-04-29 18:40:01 +04:00
|
|
|
XThreadExit(void* result) : m_result(result) { }
|
|
|
|
~XThreadExit() { }
|
2001-10-06 18:13:28 +04:00
|
|
|
|
2002-04-29 18:40:01 +04:00
|
|
|
public:
|
|
|
|
void* m_result;
|
2001-10-06 18:13:28 +04:00
|
|
|
};
|
|
|
|
|
2002-07-28 17:34:19 +04:00
|
|
|
//! Thread exception to cancel
|
|
|
|
/*!
|
|
|
|
Thrown to cancel a thread. Clients must not throw this type, but
|
|
|
|
must rethrow it if caught (by XThreadCancel, XThread, or ...).
|
|
|
|
*/
|
2001-10-06 18:13:28 +04:00
|
|
|
class XThreadCancel : public XThread { };
|
|
|
|
|
2002-07-28 17:34:19 +04:00
|
|
|
/*!
|
|
|
|
\def RETHROW_XTHREAD
|
|
|
|
Convenience macro to rethrow an XThread exception but ignore other
|
|
|
|
exceptions. Put this in your catch (...) handler after necessary
|
|
|
|
cleanup but before leaving or returning from the handler.
|
|
|
|
*/
|
2001-10-06 18:13:28 +04:00
|
|
|
#define RETHROW_XTHREAD \
|
|
|
|
try { throw; } catch (XThread&) { throw; } catch (...) { }
|
|
|
|
|
|
|
|
#endif
|