barrier/lib/mt/XThread.h

46 lines
1.1 KiB
C
Raw Normal View History

2001-10-06 18:13:28 +04:00
#ifndef XTHREAD_H
#define XTHREAD_H
//! Generic thread exception
2001-10-06 18:13:28 +04:00
class XThread { };
//! 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:
//! \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
};
//! 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 { };
//! Thread creation exception
/*!
Thrown when a thread cannot be created.
*/
class XThreadUnavailable { };
/*!
\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