在我正在编写的应用程序中,我想每 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 小时才能醒来,但大概线程会在不同点恢复由调度程序/操作系统检查时间条件,我担心这是否会导致不可忽略的功率或 CPU 时间被浪费(考虑到这将在系统上持续运行很长时间,并且它不会是系统上运行的唯一进程)。