File: classwx_recursion_guard.html

package info (click to toggle)
wxpython3.0 3.0.2.0%2Bdfsg-4
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 482,760 kB
  • ctags: 518,293
  • sloc: cpp: 2,127,226; python: 294,045; makefile: 51,942; ansic: 19,033; sh: 3,013; xml: 1,629; perl: 17
file content (160 lines) | stat: -rw-r--r-- 12,297 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<title>wxWidgets: wxRecursionGuard Class Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="extra_stylesheet.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="page_container">
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0" style="width: 100%;">
 <tbody>
 <tr>
  <td id="projectlogo">
    <a href="http://www.wxwidgets.org/" target="_new">
      <img alt="wxWidgets" src="logo.png"/>
    </a>
  </td>
  <td style="padding-left: 0.5em; text-align: right;">
   <span id="projectnumber">Version: 3.0.2</span>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- Generated by Doxygen 1.8.2 -->
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
      <li><a href="modules.html"><span>Categories</span></a></li>
      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
      <li><a href="files.html"><span>Files</span></a></li>
    </ul>
  </div>
  <div id="navrow2" class="tabs2">
    <ul class="tablist">
      <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
      <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
      <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
      <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
    </ul>
  </div>
</div><!-- top -->
<div class="header">
  <div class="summary">
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="classwx_recursion_guard-members.html">List of all members</a>  </div>
  <div class="headertitle">
<div class="title">wxRecursionGuard Class Reference<div class="ingroups"><a class="el" href="group__group__class__misc.html">Miscellaneous</a></div></div>  </div>
</div><!--header-->
<div class="contents">

<p><code>#include &lt;wx/recguard.h&gt;</code></p>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p><a class="el" href="classwx_recursion_guard.html" title="wxRecursionGuard is a very simple class which can be used to prevent reentrancy problems in a functio...">wxRecursionGuard</a> is a very simple class which can be used to prevent reentrancy problems in a function. </p>
<p>It is not thread-safe and so should be used only in single-threaded programs or in combination with some thread synchronization mechanisms.</p>
<p><a class="el" href="classwx_recursion_guard.html" title="wxRecursionGuard is a very simple class which can be used to prevent reentrancy problems in a functio...">wxRecursionGuard</a> is always used together with the <a class="el" href="classwx_recursion_guard_flag.html" title="This is a completely opaque class which exists only to be used with wxRecursionGuard, please see the example in that class&#39; documentation.">wxRecursionGuardFlag</a> like in this example:</p>
<div class="fragment"><div class="line"><span class="keywordtype">void</span> Foo()</div>
<div class="line">{</div>
<div class="line">    <span class="keyword">static</span> <a class="code" href="classwx_recursion_guard_flag.html" title="This is a completely opaque class which exists only to be used with wxRecursionGuard, please see the example in that class&#39; documentation.">wxRecursionGuardFlag</a> s_flag;</div>
<div class="line">    <a class="code" href="classwx_recursion_guard.html" title="wxRecursionGuard is a very simple class which can be used to prevent reentrancy problems in a functio...">wxRecursionGuard</a> guard(s_flag);</div>
<div class="line">    <span class="keywordflow">if</span> ( guard.IsInside() )</div>
<div class="line">    {</div>
<div class="line">        <span class="comment">// don&#39;t allow reentrancy</span></div>
<div class="line">        <span class="keywordflow">return</span>;</div>
<div class="line">    }</div>
<div class="line"></div>
<div class="line">    ...</div>
<div class="line">}</div>
</div><!-- fragment --><p>As you can see, <a class="el" href="classwx_recursion_guard.html" title="wxRecursionGuard is a very simple class which can be used to prevent reentrancy problems in a functio...">wxRecursionGuard</a> simply tests the flag value and sets it to <span class="literal">true</span> if it hadn't been already set. <a class="el" href="classwx_recursion_guard.html#a82df654ab0277174eef32eae3bcd02d1" title="Returns true if we&#39;re already inside the code block &quot;protected&quot; by this wxRecursionGuard (i...">IsInside()</a> 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 <a class="el" href="classwx_recursion_guard.html" title="wxRecursionGuard is a very simple class which can be used to prevent reentrancy problems in a functio...">wxRecursionGuard</a> 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).</p>
<h2></h2>
<div><span class="lib">Library:</span>&#160;&#160;<span class="lib_text"><a class="el" href="page_libs.html#page_libs_wxbase">wxBase</a></span></div><div><span class="category">Category:</span>&#160;&#160;<span class="category_text"><a class="el" href="group__group__class__misc.html">Miscellaneous</a></span></div> </div><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:a9dde9c6284b26edda237c219eff09145"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwx_recursion_guard.html#a9dde9c6284b26edda237c219eff09145">wxRecursionGuard</a> (<a class="el" href="classwx_recursion_guard_flag.html">wxRecursionGuardFlag</a> &amp;flag)</td></tr>
<tr class="memdesc:a9dde9c6284b26edda237c219eff09145"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="classwx_recursion_guard.html" title="wxRecursionGuard is a very simple class which can be used to prevent reentrancy problems in a functio...">wxRecursionGuard</a> object must always be initialized with a <code>static</code> <a class="el" href="classwx_recursion_guard_flag.html" title="This is a completely opaque class which exists only to be used with wxRecursionGuard, please see the example in that class&#39; documentation.">wxRecursionGuardFlag</a>.  <a href="#a9dde9c6284b26edda237c219eff09145"></a><br/></td></tr>
<tr class="separator:a9dde9c6284b26edda237c219eff09145"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adeb06fb439b4529d96f3e45544a27187"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwx_recursion_guard.html#adeb06fb439b4529d96f3e45544a27187">~wxRecursionGuard</a> ()</td></tr>
<tr class="memdesc:adeb06fb439b4529d96f3e45544a27187"><td class="mdescLeft">&#160;</td><td class="mdescRight">The destructor resets the flag value so that the function can be entered again the next time.  <a href="#adeb06fb439b4529d96f3e45544a27187"></a><br/></td></tr>
<tr class="separator:adeb06fb439b4529d96f3e45544a27187"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a82df654ab0277174eef32eae3bcd02d1"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwx_recursion_guard.html#a82df654ab0277174eef32eae3bcd02d1">IsInside</a> () const </td></tr>
<tr class="memdesc:a82df654ab0277174eef32eae3bcd02d1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns <span class="literal">true</span> if we're already inside the code block "protected" by this <a class="el" href="classwx_recursion_guard.html" title="wxRecursionGuard is a very simple class which can be used to prevent reentrancy problems in a functio...">wxRecursionGuard</a> (i.e.  <a href="#a82df654ab0277174eef32eae3bcd02d1"></a><br/></td></tr>
<tr class="separator:a82df654ab0277174eef32eae3bcd02d1"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
<a class="anchor" id="a9dde9c6284b26edda237c219eff09145"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">wxRecursionGuard::wxRecursionGuard </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classwx_recursion_guard_flag.html">wxRecursionGuardFlag</a> &amp;&#160;</td>
          <td class="paramname"><em>flag</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>A <a class="el" href="classwx_recursion_guard.html" title="wxRecursionGuard is a very simple class which can be used to prevent reentrancy problems in a functio...">wxRecursionGuard</a> object must always be initialized with a <code>static</code> <a class="el" href="classwx_recursion_guard_flag.html" title="This is a completely opaque class which exists only to be used with wxRecursionGuard, please see the example in that class&#39; documentation.">wxRecursionGuardFlag</a>. </p>
<p>The constructor saves the value of the flag to be able to return the correct value from <a class="el" href="classwx_recursion_guard.html#a82df654ab0277174eef32eae3bcd02d1" title="Returns true if we&#39;re already inside the code block &quot;protected&quot; by this wxRecursionGuard (i...">IsInside()</a>. </p>

</div>
</div>
<a class="anchor" id="adeb06fb439b4529d96f3e45544a27187"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">wxRecursionGuard::~wxRecursionGuard </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>The destructor resets the flag value so that the function can be entered again the next time. </p>
<dl class="section note"><dt>Note</dt><dd>This is not virtual, so this class is not meant to be derived from (besides, there is absolutely no reason to do it anyhow). </dd></dl>

</div>
</div>
<h2 class="groupheader">Member Function Documentation</h2>
<a class="anchor" id="a82df654ab0277174eef32eae3bcd02d1"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">bool wxRecursionGuard::IsInside </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Returns <span class="literal">true</span> if we're already inside the code block "protected" by this <a class="el" href="classwx_recursion_guard.html" title="wxRecursionGuard is a very simple class which can be used to prevent reentrancy problems in a functio...">wxRecursionGuard</a> (i.e. </p>
<p>between this line and the end of current scope). Usually the function using <a class="el" href="classwx_recursion_guard.html" title="wxRecursionGuard is a very simple class which can be used to prevent reentrancy problems in a functio...">wxRecursionGuard</a> takes some specific actions in such case (may be simply returning) to prevent reentrant calls to itself.</p>
<p>If this method returns <span class="literal">false</span>, it is safe to continue. </p>

</div>
</div>
</div><!-- contents -->

<address class="footer">
	<small>
		Generated on Thu Nov 27 2014 13:46:54 for wxWidgets by <a href="http://www.doxygen.org/index.html" target="_new">Doxygen</a> 1.8.2
	</small>
</address>
<script src="wxwidgets.js" type="text/javascript"></script>
</div><!-- #page_container -->
</body>
</html>