This commit is contained in:
cxh 2025-11-14 18:33:35 +08:00
parent dcb5978274
commit 5d4f895a34
3 changed files with 21 additions and 6 deletions

View File

@ -1,5 +1,6 @@
#pragma once
#include <atomic>
#include <chrono>
#include <filesystem>
#include <string>
@ -72,7 +73,7 @@ class RecordManager
void stopAutoScan();
std::thread scan_thread_;
bool running_ = false;
std::atomic<bool> running_{false};
int scan_interval_sec_ = 60;
};

View File

@ -79,6 +79,14 @@ int main()
// ---------- 退出清理 ----------
LOG_INFO("[MAIN] Shutdown requested. Stopping RTMP streams...");
// 1) 停止 RecordManager 自动扫描线程
if (g_record_manager)
{
g_record_manager->stopAutoScan();
LOG_INFO("[MAIN] RecordManager auto-scan stopped.");
}
RTMPManager::stop_all();
if (mqtt_thread.joinable())

View File

@ -123,10 +123,10 @@ bool RecordManager::loadSrsConfig()
void RecordManager::startAutoScan(int interval_sec)
{
scan_interval_sec_ = interval_sec; // ← 保存扫描周期
scan_interval_sec_ = interval_sec;
if (running_) return;
running_ = true;
running_.store(true);
scan_thread_ = std::thread(
[this]()
@ -134,20 +134,26 @@ void RecordManager::startAutoScan(int interval_sec)
LOG_INFO("[RecordManager] Auto-scan thread started, interval = " + std::to_string(scan_interval_sec_) +
" seconds.");
while (running_)
while (running_.load() && g_running.load())
{
auto t0 = std::chrono::steady_clock::now();
this->scanAll();
LOG_INFO("[RecordManager] scanAll() completed.");
// 休眠剩余时间
// 休眠剩余时间(支持快速退出)
auto t1 = std::chrono::steady_clock::now();
auto used_ms = std::chrono::duration_cast<std::chrono::milliseconds>(t1 - t0).count();
int sleep_ms = scan_interval_sec_ * 1000 - used_ms;
if (sleep_ms < 100) sleep_ms = 100;
std::this_thread::sleep_for(std::chrono::milliseconds(sleep_ms));
int remain = sleep_ms;
while (remain > 0 && running_.load() && g_running.load())
{
int chunk = std::min(remain, 200);
std::this_thread::sleep_for(std::chrono::milliseconds(chunk));
remain -= chunk;
}
}
LOG_INFO("[RecordManager] Auto-scan thread stopped.");