| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- /////////////////////////////////////////////////////////////////////////////
- // Name: recguard.h
- // Purpose: interface of wxRecursionGuardFlag
- // Author: wxWidgets team
- // Licence: wxWindows licence
- /////////////////////////////////////////////////////////////////////////////
- /**
- @class wxRecursionGuardFlag
- This is a completely opaque class which exists only to be used with
- wxRecursionGuard, please see the example in that class' documentation.
- @remarks
- wxRecursionGuardFlag object must be declared @c static or the recursion
- would never be detected.
- @library{wxbase}
- @category{misc}
- */
- class wxRecursionGuardFlag
- {
- public:
- };
- /**
- @class wxRecursionGuard
- wxRecursionGuard is a very simple class which can be used to prevent reentrancy
- problems in a function. It is not thread-safe and so should be used only in
- single-threaded programs or in combination with some thread synchronization
- mechanisms.
- wxRecursionGuard is always used together with the
- wxRecursionGuardFlag like in this example:
- @code
- void Foo()
- {
- static wxRecursionGuardFlag s_flag;
- wxRecursionGuard guard(s_flag);
- if ( guard.IsInside() )
- {
- // don't allow reentrancy
- return;
- }
- ...
- }
- @endcode
- As you can see, wxRecursionGuard simply tests the flag value and sets it to
- @true if it hadn't been already set.
- IsInside() allows testing the old flag
- value. The advantage of using this class compared to directly manipulating the
- flag is that the flag is always reset in the wxRecursionGuard destructor and so
- you don't risk to forget to do it even if the function returns in an unexpected
- way (for example because an exception has been thrown).
- @library{wxbase}
- @category{misc}
- */
- class wxRecursionGuard
- {
- public:
- /**
- A wxRecursionGuard object must always be initialized with a @c static
- wxRecursionGuardFlag. The constructor saves the
- value of the flag to be able to return the correct value from
- IsInside().
- */
- wxRecursionGuard(wxRecursionGuardFlag& flag);
- /**
- The destructor resets the flag value so that the function can be entered again
- the next time.
- @note This is not virtual, so this class is not meant to be derived
- from (besides, there is absolutely no reason to do it anyhow).
- */
- ~wxRecursionGuard();
- /**
- Returns @true if we're already inside the code block "protected" by this
- wxRecursionGuard (i.e. between this line and the end of current scope).
- Usually the function using wxRecursionGuard takes some specific actions
- in such case (may be simply returning) to prevent reentrant calls to itself.
- If this method returns @false, it is safe to continue.
- */
- bool IsInside() const;
- };
|