0
在我編寫的應用程序中,我想每24小時對數據進行一次備份,以幫助防止在文件損壞或其他情況下丟失數據的風險失敗。等待24小時的線程的潛在系統成本
要做到這一點,我用一個簡單的主題是這樣的:
void BackupThread(const std::atomic<bool>& bTerminateFlag)
{
std::stringstream ssFilePathAndName;
while(!bTerminateFlag.load())
{
std::this_thread::sleep_for(std::chrono::hours(24));
std::time_t std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());
ssFilePathAndName << "\\Backup" << "\\BackupFile-" << std::put_time(std::localtime(&t), "%Y-%m-%d-%H-%M-%S") << ".txt";
// Save the data using our thread-safe Singleton object:
g_pManager->Save(ssFilePathAndName.str());
ssFilePathAndName.str("");
ssFilePathAndName.clear();
}
}
我再開始此使用參考我的主要應用程序類的成員變量:
m_backupThread = std::thread(BackupThread, std::cref(m_bBackupTerminateFlag));
然而,我對於這個過程是否是一種壞的方式(系統資源明智的)感到好奇,因爲儘管我已經指定了線程在喚醒之前必須等待24個小時,但是可能線程會在調度程序的各個點上覆活/ OS來檢查時間條件,我是擔心這是否會導致不可忽視的功耗或CPU時間浪費(考慮到這將在系統上持續運行很長一段時間,並且它不會是系統上唯一運行的進程)。
似乎很愚蠢。爲什麼不只是設置一個cron作業(或Windows的at命令)來運行你的程序呢? –
@JohnDibling - cron作業和其他進程外調度程序對於許多任務來說並不方便。例如,如果要在複製之前刷新數據並關閉文件,通常很難通知作業已準備就緒等。線程通常更簡單。 –