📄 recguard.tex
字号:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Name: recguard.tex%% Purpose: wxRecursionGuard documentation%% Author: Vadim Zeitlin%% Modified by:%% Created: 14.08.03%% RCS-ID: $Id: recguard.tex,v 1.5 2006/05/28 23:56:50 VZ Exp $%% Copyright: (c) Vadim Zeitlin%% License: wxWindows license%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\section{\class{wxRecursionGuard}}\label{wxrecursionguard}wxRecursionGuard is a very simple class which can be used to prevent reentrancyproblems in a function. It is not thread-safe and so should be used only insingle-threaded programs or in combination with some thread synchronizationmechanisms.wxRecursionGuard is always used together with the \helpref{wxRecursionGuardFlag}{wxrecursionguardflag} like in this example:\begin{verbatim} void Foo() { static wxRecursionGuardFlag s_flag; wxRecursionGuard guard(s_flag); if ( guard.IsInside() ) { // don't allow reentrancy return; } ... }\end{verbatim}As you can see, wxRecursionGuard simply tests the flag value and sets it totrue if it hadn't been already set. \helpref{IsInside()}{wxrecursionguardisinside} allows testing the old flagvalue. The advantage of using this class compared to directly manipulating theflag is that the flag is always reset in the wxRecursionGuard destructor and soyou don't risk to forget to do it even if the function returns in an unexpectedway (for example because an exception has been thrown).\wxheading{Derived from}No base class\wxheading{Include files}<wx/recguard.h>\latexignore{\rtfignore{\wxheading{Members}}}\membersection{wxRecursionGuard::wxRecursionGuard}\label{wxrecursionguardctor}\func{}{wxRecursionGuard}{\param{wxRecursionGuardFlag\& }{flag}}A wxRecursionGuard object must always be initialized with a (static) \helpref{wxRecursionGuardFlag}{wxrecursionguardflag}. The constructor saves thevalue of the flag to be able to return the correct value from \helpref{IsInside}{wxrecursionguardisinside}.\membersection{wxRecursionGuard::\destruct{wxRecursionGuard}}\label{wxrecursionguarddtor}\func{}{\destruct{wxRecursionGuard}}{\void}The destructor resets the flag value so that the function can be entered againthe next time.Note that it is not virtual and so this class is not meant to be derived from(besides, there is absolutely no reason to do it anyhow).\membersection{wxRecursionGuard::IsInside}\label{wxrecursionguardisinside}\constfunc{bool}{IsInside}{\void}Returns \true if we're already inside the code block ``protected'' by thiswxRecursionGuard (i.e. between this line and the end of current scope). Usuallythe 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.\section{\class{wxRecursionGuardFlag}}\label{wxrecursionguardflag}This is a completely opaque class which exists only to be used with \helpref{wxRecursionGuard}{wxrecursionguard}, please see the example in thatclass documentation.Please notice that wxRecursionGuardFlag object \emph{must} be declared \texttt{static} or the recursion would never be detected.\wxheading{Derived from}No base class\wxheading{Include files}<wx/recguard.h>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -