void BaseFileFind::cancel() { SearchResult *search = qobject_cast<SearchResult *>(sender()); QTC_ASSERT(search, return); QFutureWatcher<FileSearchResultList> *watcher = m_watchers.key(search); QTC_ASSERT(watcher, return); watcher->cancel(); }
void TaskDispatcher::cancelRunningTasks(bool wait) { QMutexLocker locker(&mutex_); for (size_t i = 0, i_end = active_watchers_.size(); i < i_end; ++ i) { QFutureWatcher<void>* watcher = dynamic_cast<QFutureWatcher<void>*>(active_watchers_[i]); watcher->cancel(); if (wait) watcher->waitForFinished(); } return; }
void SymbolsFindFilter::addResults(int begin, int end) { QFutureWatcher<SearchResultItem> *watcher = static_cast<QFutureWatcher<SearchResultItem> *>(sender()); SearchResult *search = m_watchers.value(watcher); if (!search) { // search was removed from search history while the search is running watcher->cancel(); return; } QList<SearchResultItem> items; for (int i = begin; i < end; ++i) items << watcher->resultAt(i); search->addResults(items, SearchResult::AddSorted); }
void BaseFileFind::displayResult(int index) { QFutureWatcher<FileSearchResultList> *watcher = static_cast<QFutureWatcher<FileSearchResultList> *>(sender()); SearchResult *search = d->m_watchers.value(watcher); if (!search) { // search was removed from search history while the search is running watcher->cancel(); return; } FileSearchResultList results = watcher->resultAt(index); QList<SearchResultItem> items; foreach (const FileSearchResult &result, results) { SearchResultItem item; item.path = QStringList() << QDir::toNativeSeparators(result.fileName); item.lineNumber = result.lineNumber; item.text = result.matchingLine; item.textMarkLength = result.matchLength; item.textMarkPos = result.matchStart; item.useTextEditorFont = true; item.userData = result.regexpCapturedTexts; items << item; }
void tst_QFutureWatcher::canceled() { const int listSize = 20; QList<int> list = createList(listSize); QFutureWatcher<void> futureWatcher; QFuture<void> future; CancelObject cancelObject; QObject::connect(&futureWatcher, SIGNAL(canceled()), &cancelObject, SLOT(cancel())); QObject::connect(&futureWatcher, SIGNAL(canceled()), &QTestEventLoop::instance(), SLOT(exitLoop()), Qt::QueuedConnection); future = QtConcurrent::map(list, mapSleeper); futureWatcher.setFuture(future); futureWatcher.cancel(); QTestEventLoop::instance().enterLoop(5); QVERIFY(!QTestEventLoop::instance().timeout()); QVERIFY(future.isCanceled()); QVERIFY(cancelObject.wasCanceled); futureWatcher.disconnect(); future.waitForFinished(); }