#include #include #include #include #include #include #include int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); // This timer merely proves that the main loop stays active. // Look at the console log, you should see a time print every 100ms. // Try potting a sleep in the async lambda below, you will see that you still get a time dump every 100ms (that is good!) QTimer demo; demo.setInterval(100); QObject::connect(&demo, &QTimer::timeout, []() { qDebug() << QTime::currentTime(); }); demo.start(); // Just a temp file. You don't need it in your patch for KIO. QTemporaryFile tempFile; tempFile.setAutoRemove(false); tempFile.open(); QEventLoop loop; QString fullFilePath = tempFile.fileName(); auto deleteResult = std::async(std::launch::async, [fullFilePath, &loop]() { // Get the result of deleting the file, we ruturn this later on. bool result = QFile::remove(fullFilePath); // Quit the eventloop instance, this unblocks the function that called exec on that loop object. loop.quit(); // Return whatever the result was. Should be checked in the parent function. return result; }); // This blocks the function at _this_ point till quit() is called on the loop. loop.exec(); // We get here if quit() was called. Get the value from the std::async return (the bool of the delete call) // And do whatever checks you want. if (deleteResult.get()) { qDebug() << "file removed"; } else { qDebug() << "File is still there..."; } return a.exec(); }