1
This commit is contained in:
parent
dcb5978274
commit
5d4f895a34
@ -1,5 +1,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <atomic>
|
||||||
#include <chrono>
|
#include <chrono>
|
||||||
#include <filesystem>
|
#include <filesystem>
|
||||||
#include <string>
|
#include <string>
|
||||||
@ -72,7 +73,7 @@ class RecordManager
|
|||||||
void stopAutoScan();
|
void stopAutoScan();
|
||||||
|
|
||||||
std::thread scan_thread_;
|
std::thread scan_thread_;
|
||||||
bool running_ = false;
|
std::atomic<bool> running_{false};
|
||||||
int scan_interval_sec_ = 60;
|
int scan_interval_sec_ = 60;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -79,6 +79,14 @@ int main()
|
|||||||
|
|
||||||
// ---------- 退出清理 ----------
|
// ---------- 退出清理 ----------
|
||||||
LOG_INFO("[MAIN] Shutdown requested. Stopping RTMP streams...");
|
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();
|
RTMPManager::stop_all();
|
||||||
|
|
||||||
if (mqtt_thread.joinable())
|
if (mqtt_thread.joinable())
|
||||||
|
|||||||
@ -123,10 +123,10 @@ bool RecordManager::loadSrsConfig()
|
|||||||
|
|
||||||
void RecordManager::startAutoScan(int interval_sec)
|
void RecordManager::startAutoScan(int interval_sec)
|
||||||
{
|
{
|
||||||
scan_interval_sec_ = interval_sec; // ← 保存扫描周期
|
scan_interval_sec_ = interval_sec;
|
||||||
if (running_) return;
|
if (running_) return;
|
||||||
|
|
||||||
running_ = true;
|
running_.store(true);
|
||||||
|
|
||||||
scan_thread_ = std::thread(
|
scan_thread_ = std::thread(
|
||||||
[this]()
|
[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_) +
|
LOG_INFO("[RecordManager] Auto-scan thread started, interval = " + std::to_string(scan_interval_sec_) +
|
||||||
" seconds.");
|
" seconds.");
|
||||||
|
|
||||||
while (running_)
|
while (running_.load() && g_running.load())
|
||||||
{
|
{
|
||||||
auto t0 = std::chrono::steady_clock::now();
|
auto t0 = std::chrono::steady_clock::now();
|
||||||
|
|
||||||
this->scanAll();
|
this->scanAll();
|
||||||
LOG_INFO("[RecordManager] scanAll() completed.");
|
LOG_INFO("[RecordManager] scanAll() completed.");
|
||||||
|
|
||||||
// 休眠剩余时间
|
// 休眠剩余时间(支持快速退出)
|
||||||
auto t1 = std::chrono::steady_clock::now();
|
auto t1 = std::chrono::steady_clock::now();
|
||||||
auto used_ms = std::chrono::duration_cast<std::chrono::milliseconds>(t1 - t0).count();
|
auto used_ms = std::chrono::duration_cast<std::chrono::milliseconds>(t1 - t0).count();
|
||||||
int sleep_ms = scan_interval_sec_ * 1000 - used_ms;
|
int sleep_ms = scan_interval_sec_ * 1000 - used_ms;
|
||||||
if (sleep_ms < 100) sleep_ms = 100;
|
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.");
|
LOG_INFO("[RecordManager] Auto-scan thread stopped.");
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user