projects
/
dcpomatic.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Move Image::as_png() out to image_as_png().
[dcpomatic.git]
/
src
/
lib
/
signaller.h
diff --git
a/src/lib/signaller.h
b/src/lib/signaller.h
index c6037deaa085c737bce9e750b2171fba67aecd53..44650de871cbbd4109aa403d6e465ce7899c7b6b 100644
(file)
--- a/
src/lib/signaller.h
+++ b/
src/lib/signaller.h
@@
-1,36
+1,35
@@
/*
/*
- Copyright (C) 2015 Carl Hetherington <cth@carlh.net>
+ Copyright (C) 2015
-2021
Carl Hetherington <cth@carlh.net>
- This program is free software; you can redistribute it and/or modify
+ This file is part of DCP-o-matic.
+
+ DCP-o-matic is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
-
This program
is distributed in the hope that it will be useful,
+
DCP-o-matic
is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>.
*/
*/
+
#ifndef DCPOMATIC_SIGNALLER_H
#define DCPOMATIC_SIGNALLER_H
#ifndef DCPOMATIC_SIGNALLER_H
#define DCPOMATIC_SIGNALLER_H
+
#include "signal_manager.h"
#include <boost/thread/mutex.hpp>
#include "signal_manager.h"
#include <boost/thread/mutex.hpp>
+
class WrapperBase
{
public:
class WrapperBase
{
public:
- WrapperBase ()
- : _valid (true)
- , _finished (false)
- {}
-
virtual ~WrapperBase () {}
/* Can be called from any thread */
virtual ~WrapperBase () {}
/* Can be called from any thread */
@@
-58,10
+57,11
@@
public:
protected:
/* Protect _valid and _finished */
mutable boost::mutex _mutex;
protected:
/* Protect _valid and _finished */
mutable boost::mutex _mutex;
- bool _valid;
- bool _finished;
+ bool _valid
= true
;
+ bool _finished
= false
;
};
};
+
/** Helper class to manage lifetime of signals, specifically to address
* the problem where an object containing a signal is deleted before
* its signal is emitted.
/** Helper class to manage lifetime of signals, specifically to address
* the problem where an object containing a signal is deleted before
* its signal is emitted.
@@
-70,7
+70,7
@@
template <class T>
class Wrapper : public WrapperBase
{
public:
class Wrapper : public WrapperBase
{
public:
- Wrapper (T signal)
+
explicit
Wrapper (T signal)
: _signal (signal)
{
: _signal (signal)
{
@@
-90,6
+90,7
@@
private:
T _signal;
};
T _signal;
};
+
/** Parent for any class which needs to raise cross-thread signals (from non-UI
* to UI). Subclasses should call, e.g. emit (boost::bind (boost::ref (MySignal), foo, bar));
*/
/** Parent for any class which needs to raise cross-thread signals (from non-UI
* to UI). Subclasses should call, e.g. emit (boost::bind (boost::ref (MySignal), foo, bar));
*/
@@
-99,8
+100,8
@@
public:
/* Can be called from any thread */
virtual ~Signaller () {
boost::mutex::scoped_lock lm (_signaller_mutex);
/* Can be called from any thread */
virtual ~Signaller () {
boost::mutex::scoped_lock lm (_signaller_mutex);
- for (
std::list<WrapperBase*>::iterator i = _wrappers.begin(); i != _wrappers.end(); ++i
) {
-
(*i)->invalidate
();
+ for (
auto i: _wrappers
) {
+
i->invalidate
();
}
}
}
}
@@
-108,17
+109,17
@@
public:
template <class T>
void emit (T signal)
{
template <class T>
void emit (T signal)
{
-
Wrapper<T>*
w = new Wrapper<T> (signal);
+
auto
w = new Wrapper<T> (signal);
if (signal_manager) {
if (signal_manager) {
- signal_manager->emit (boost::bind
(&Wrapper<T>::signal, w));
+ signal_manager->emit (boost::bind(&Wrapper<T>::signal, w));
}
boost::mutex::scoped_lock lm (_signaller_mutex);
/* Clean up finished Wrappers */
}
boost::mutex::scoped_lock lm (_signaller_mutex);
/* Clean up finished Wrappers */
-
std::list<WrapperBase*>::iterator
i = _wrappers.begin ();
+
auto
i = _wrappers.begin ();
while (i != _wrappers.end ()) {
while (i != _wrappers.end ()) {
-
std::list<WrapperBase*>::iterator
tmp = i;
+
auto
tmp = i;
++tmp;
if ((*i)->finished ()) {
delete *i;
++tmp;
if ((*i)->finished ()) {
delete *i;
@@
-137,4
+138,5
@@
private:
std::list<WrapperBase*> _wrappers;
};
std::list<WrapperBase*> _wrappers;
};
+
#endif
#endif