私が書いているアプリケーションでは、ファイルの破損やその他の障害が発生した場合にデータが失われるリスクを防ぐために、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 時間が浪費されるのではないかと心配していました (これがシステム上で非常に長い時間継続的に実行されることを考えると、システムで実行されている唯一のプロセスではありません)。