diff --git a/components/rgbd-sources/src/snapshot.cpp b/components/rgbd-sources/src/snapshot.cpp
index 2bcb95fa8f851c97cb15d46314fddb0f63ef08ef..9980235ae615c4d6ab5af95052de1943ac6a86eb 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;