From 2a5695139d314b33357930092c7629c22d051815 Mon Sep 17 00:00:00 2001
From: Sebastian Hahta <joseha@utu.fi>
Date: Fri, 12 Jul 2019 11:53:05 +0300
Subject: [PATCH] closes #114; precision depends on thread::sleep_for

---
 components/rgbd-sources/src/snapshot.cpp | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/components/rgbd-sources/src/snapshot.cpp b/components/rgbd-sources/src/snapshot.cpp
index 2bcb95fa8..9980235ae 100644
--- a/components/rgbd-sources/src/snapshot.cpp
+++ b/components/rgbd-sources/src/snapshot.cpp
@@ -145,7 +145,9 @@ bool SnapshotWriter::addCameraRGBD(const string &name, const Mat &rgb, const Mat
 }
 
 SnapshotStreamWriter::SnapshotStreamWriter(const string &filename, int delay) : 
-		run_(false), finished_(false), writer_(filename), delay_(delay) {}
+		run_(false), finished_(false), delay_(delay), writer_(filename) {
+		DCHECK(delay > 0);
+	}
 
 SnapshotStreamWriter::~SnapshotStreamWriter() {
 
@@ -161,8 +163,10 @@ void SnapshotStreamWriter::run() {
 	vector<Mat> depth(sources_.size());
 
 	while(run_) {
-		auto now = std::chrono::system_clock::now();
-		auto duration = now.time_since_epoch();
+		auto t_now = std::chrono::system_clock::now();
+		auto t_wakeup = t_now + std::chrono::milliseconds(delay_);
+
+		auto duration = t_now.time_since_epoch();
 		auto ms = std::chrono::duration_cast<std::chrono::milliseconds>(duration).count();
 
 		for(size_t i = 0; i < sources_.size(); ++i) {
@@ -173,7 +177,7 @@ void SnapshotStreamWriter::run() {
 			writer_.addCameraRGBD(std::to_string(ms) + "-" + std::to_string(i), rgb[i], depth[i]);
 		}
 
-		std::this_thread::sleep_for(std::chrono::milliseconds(delay_));
+		std::this_thread::sleep_until(t_wakeup);
 	}
 
 	run_ = false;
-- 
GitLab