summaryrefslogtreecommitdiff
path: root/support/dktools/DkWxProcessingIdleController.cpt
blob: 0fb8f45420fd979f2fb8424a52f3801e6c901a43 (plain)
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
%%	options

copyright owner	=	Dirk Krause
copyright year	=	2013-xxxx
license		=	bsd

%%	header

#include <DkWxProcessingController.h>

/**	Protect idle event handler from concurrent execution.
	In contrast to a critical section which delays execution of
	code this class skips the code execution.
*/
class DkWxProcessingIdleController : public DkWxProcessingController
{
  protected:

    /**	Avoid concurrent access to bWantMore.
    */
    wxMutex		mxProtectWantMore;

    /**	Flag: More idle events wanted.
    */
    bool		bWantMore;

  public:

    /**	Constructor.
    */
    DkWxProcessingIdleController();

    /**	Indicate interest in more idle events (thread-safe).
    	@param	value	New flag value.
    */
    void	setWantMore(bool value = true);

    /**	Indicate no more interest in further idle events (thread-safe).
    */
    void	resetWantMore(void);

    /**	Check for interest in further idle events (thread-safe).
    	@return	true to ask for further events, false otherwise.
    */
    bool	wantMore(void);

};


%%	module

#include "DkWxProcessingIdleController.h"



$!trace-include



DkWxProcessingIdleController::DkWxProcessingIdleController()
: DkWxProcessingController()
{
  bWantMore = false;
}



void
DkWxProcessingIdleController::setWantMore(bool value)
{
  wxMutexLocker	lock(mxProtectWantMore);
  bWantMore = value;
}



void
DkWxProcessingIdleController::resetWantMore(void)
{
  wxMutexLocker lock(mxProtectWantMore);
  bWantMore = false;
}



bool
DkWxProcessingIdleController::wantMore(void)
{
  bool		back = false;
  {
    wxMutexLocker	lock(mxProtectWantMore);
    back = bWantMore;
  }
  return back;
}