A阻塞主線程正常運行,需要做特殊處理。
以下代碼可實現,A阻塞或者正常處理時,均不阻塞主線程正常處理。
QEventLoop eventloop; // use point to manage eventloop QPointer<QEventLoop> blocker(&eventloop); bool runOk = false; // timeout 5000ms,exit QTimer::singleShot(5000, &eventloop, &QEventLoop::quit); std::async([blocker, &runOk]() { // // async mehthon run your logic // do something // exit if (blocker) { blocker->quit(); runOk = true; } }); // running eventloop.exec(); // normal exit do something if (runOk) { // do something } else { // timeout do something }