1
This commit is contained in:
parent
dcb5978274
commit
5d4f895a34
@ -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;
|
||||
};
|
||||
|
||||
|
||||
@ -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())
|
||||
|
||||
@ -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.");
|
||||
|
||||
Loading…
Reference in New Issue
Block a user