Fawkes API Fawkes Development Version
thread_finalizer.cpp
1
2/***************************************************************************
3 * thread_finalizer.cpp - Thread finalizer interface
4 *
5 * Created: Fri Jan 12 13:29:29 2007
6 * Copyright 2006-2007 Tim Niemueller [www.niemueller.de]
7 *
8 ****************************************************************************/
9
10/* This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version. A runtime exception applies to
14 * this software (see LICENSE.GPL_WRE file mentioned below for details).
15 *
16 * This program is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU Library General Public License for more details.
20 *
21 * Read the full text in the LICENSE.GPL_WRE file in the doc directory.
22 */
23
24#include <core/threading/thread_finalizer.h>
25
26namespace fawkes {
27
28/** @class CannotFinalizeThreadException core/threading/thread_finalizer.h
29 * Thread cannot be finalized.
30 * Thrown if a thread could not be finalized for whatever reason.
31 * @ingroup Exceptions
32 */
33
34/** Constructor.
35 * @param format message format (reason or symptom of failure)
36 */
38{
39 va_list va;
40 va_start(va, format);
41 append_va(format, va);
42 va_end(va);
43}
44
45/** Constructor.
46 * @param e exception to copy messages from
47 */
49{
50}
51
52/** @class ThreadFinalizer core/threading/thread_finalizer.h
53 * Thread finalizer interface.
54 * This interface is used by the ThreadManager. The finalize() method is called
55 * for each thread that is about to be removed. If there are any special needs
56 * that have to be finalized before the thread is stopped on the given real
57 * classes of the thread this is the way to do it.
58 *
59 * The finalizer may abort the stopping of a thread by throwing a
60 * CannotFinalizeThreadException. This can for example be used if you have two
61 * threads A and B. A depends on B in that B is needed for A to run properly.
62 * Now both threads are running and then B is called to stop. The finalize will
63 * call threads B finalize() method, which fails (because it knows about the
64 * dependency of A for example by some kind of register pattern). This tells the
65 * thread manager not to stop B, because this would break A.
66 *
67 * See Fawkes main application for
68 * an example.
69 * @author Tim Niemueller
70 *
71 * @fn bool ThreadFinalizer::prepare_finalize(Thread *thread) = 0
72 * Prepare finalization of a thread.
73 * If the finalizer needs to do anything to prepare a maybe following finalize()
74 * can do so here. This is also the only place where it proclaim that finalizing
75 * the given thread at the given time is unsafe.
76 * The finalizer shall NOT call Thread::prepare_finalize().
77 * @param thread thread to prepare finalization for
78 * @return true if nothing prevents finalization, false otherwise
79 * @see Thread::prepare_finalize()
80 *
81 *
82 * @fn void ThreadFinalizer::finalize(Thread *thread) = 0
83 * Finalize a thread.
84 * This method is called by the ThreadManager for each Thread that is to be
85 * stopped and removed from the list of running threads.
86 * The finalizer shall NOT call Thread::finalize().
87 * @param thread thread to finalize.
88 * @exception CannotFinalizeThread thrown if thread can for not b finalized
89 * @see Thread::finalize()
90 */
91
92/** Virtual empty destructor. */
94{
95}
96
97} // end namespace fawkes
CannotFinalizeThreadException(const char *format,...)
Constructor.
Base class for exceptions in Fawkes.
Definition: exception.h:36
void append_va(const char *format, va_list va) noexcept
Append messages to the message list.
Definition: exception.cpp:353
virtual ~ThreadFinalizer()
Virtual empty destructor.
Fawkes library namespace.