summaryrefslogtreecommitdiff
path: root/src/libcamera/timer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/libcamera/timer.cpp')
-rw-r--r--src/libcamera/timer.cpp28
1 files changed, 26 insertions, 2 deletions
diff --git a/src/libcamera/timer.cpp b/src/libcamera/timer.cpp
index 0dcb4e76..f45061d4 100644
--- a/src/libcamera/timer.cpp
+++ b/src/libcamera/timer.cpp
@@ -13,6 +13,8 @@
#include <libcamera/event_dispatcher.h>
#include "log.h"
+#include "message.h"
+#include "thread.h"
/**
* \file timer.h
@@ -66,7 +68,7 @@ void Timer::start(unsigned int msec)
<< "Starting timer " << this << " with interval "
<< msec << ": deadline " << deadline_;
- CameraManager::instance()->eventDispatcher()->registerTimer(this);
+ registerTimer();
}
/**
@@ -79,11 +81,21 @@ void Timer::start(unsigned int msec)
*/
void Timer::stop()
{
- CameraManager::instance()->eventDispatcher()->unregisterTimer(this);
+ unregisterTimer();
deadline_ = 0;
}
+void Timer::registerTimer()
+{
+ thread()->eventDispatcher()->registerTimer(this);
+}
+
+void Timer::unregisterTimer()
+{
+ thread()->eventDispatcher()->unregisterTimer(this);
+}
+
/**
* \brief Check if the timer is running
* \return True if the timer is running, false otherwise
@@ -112,4 +124,16 @@ bool Timer::isRunning() const
* The timer pointer is passed as a parameter.
*/
+void Timer::message(Message *msg)
+{
+ if (msg->type() == Message::ThreadMoveMessage) {
+ if (deadline_) {
+ unregisterTimer();
+ invokeMethod(&Timer::registerTimer);
+ }
+ }
+
+ Object::message(msg);
+}
+
} /* namespace libcamera */