最简单的部分是检查文件是否存在:当您打开文件时,只有文件存在时std::ifstream
它才会处于良好状态:
std::ifstream in(filename);
if (in) {
// the file exists and can be processed here
}
更有趣的部分是定期做一些事情。基本思想是以某种形式设置一个计时器。根据是否需要做任何其他事情,您可能需要一个单独的线程:如果程序只是等到文件存在并且在此期间不做任何事情,您可以只是休眠并且不需要产生另一个线程。否则,您可能想要生成一个正在休眠的线程。
假设您需要使用单独的线程,您可能希望能够中断它的等待,例如,在有条件的情况下从单独的线程中以干净的方式退出。因此,我将使用带有定时等待的条件变量,即,如下所示:
std::mutex guard;
std::condition_variable condition;
bool done(false);
std::unique_lock<std::mutex> lock(guard);
while (!done) {
condition.wait_for(lock, std::chrono::minutes(n));
if (!done) {
do_whatever_needs_to_be_done_once_every_n_minutes();
}
}
上面的代码使用 C++ 2011 工具。如果您不能使用相应的类,您可以使用合适的替代品,例如Boost类。