Использование операции форматирования файловой системы remove_all()
должно выполнять эту работу для вас обычно.
Я думаю, вы имеете в виду, что эта операция может вызвать исключение или вернуть ошибку, а не ждать, когда один файл не может быть удален из-за одновременного доступа. Вы можете просто решить эту проблему, поймать исключение и поставить блок Try/поймать внутри цикла, который работает до тех пор, вся операция не делается без каких-либо ошибок или исключения:
boost::filesystem::path dirToRemove("SomeDirectoryToRemove");
bool completed = false;
while(!completed)
{
try
{
boost::filesystem::remove_all(dirToRemove);
completed = true;
}
catch(...)
{
// put a sleep() call or other blocking operation here, to give other
// threads a chance to run, while this one waits to get rid of the error
// condition.
}
}
Так как это специфическая функция ОС, трудно сказать обычно, как будет вести себя вызывающий поток. Но я бы сказал, что для большинства операционных систем поток ** будет ** заблокирован уже во время этой операции. –
Что такое ОС? –