Skip to content
Snippets Groups Projects
Commit ecab2093 authored by Roberto Raggi's avatar Roberto Raggi
Browse files

Wait the future values.

parent c395680e
No related branches found
No related tags found
No related merge requests found
...@@ -35,6 +35,7 @@ ...@@ -35,6 +35,7 @@
#include <functional> #include <functional>
#include <QtConcurrentRun> #include <QtConcurrentRun>
#include <QFutureSynchronizer>
#include <qtconcurrent/runextensions.h> #include <qtconcurrent/runextensions.h>
#include <texteditor/itexteditor.h> #include <texteditor/itexteditor.h>
...@@ -163,6 +164,7 @@ class CppPreprocessor: public CPlusPlus::Client ...@@ -163,6 +164,7 @@ class CppPreprocessor: public CPlusPlus::Client
{ {
public: public:
CppPreprocessor(QPointer<CppModelManager> modelManager); CppPreprocessor(QPointer<CppModelManager> modelManager);
virtual ~CppPreprocessor();
void setWorkingCopy(const QMap<QString, QByteArray> &workingCopy); void setWorkingCopy(const QMap<QString, QByteArray> &workingCopy);
void setIncludePaths(const QStringList &includePaths); void setIncludePaths(const QStringList &includePaths);
...@@ -212,6 +214,7 @@ private: ...@@ -212,6 +214,7 @@ private:
Document::Ptr m_currentDoc; Document::Ptr m_currentDoc;
QSet<QString> m_todo; QSet<QString> m_todo;
QSet<QString> m_processed; QSet<QString> m_processed;
QFutureSynchronizer<void> m_synchronizer;
}; };
} // namespace Internal } // namespace Internal
...@@ -221,6 +224,11 @@ CppPreprocessor::CppPreprocessor(QPointer<CppModelManager> modelManager) ...@@ -221,6 +224,11 @@ CppPreprocessor::CppPreprocessor(QPointer<CppModelManager> modelManager)
: snapshot(modelManager->snapshot()), : snapshot(modelManager->snapshot()),
m_modelManager(modelManager), m_modelManager(modelManager),
preprocess(this, &env) preprocess(this, &env)
{
m_synchronizer.setCancelOnWait(true);
}
CppPreprocessor::~CppPreprocessor()
{ } { }
void CppPreprocessor::setWorkingCopy(const QMap<QString, QByteArray> &workingCopy) void CppPreprocessor::setWorkingCopy(const QMap<QString, QByteArray> &workingCopy)
...@@ -502,7 +510,7 @@ void CppPreprocessor::sourceNeeded(QString &fileName, IncludeType type, ...@@ -502,7 +510,7 @@ void CppPreprocessor::sourceNeeded(QString &fileName, IncludeType type,
snapshot.insert(doc->fileName(), doc); snapshot.insert(doc->fileName(), doc);
m_todo.remove(fileName); m_todo.remove(fileName);
QtConcurrent::run(Process(m_modelManager), doc); m_synchronizer.addFuture(QtConcurrent::run(Process(m_modelManager), doc));
(void) switchDocument(previousDoc); (void) switchDocument(previousDoc);
} }
...@@ -528,6 +536,8 @@ Document::Ptr CppPreprocessor::switchDocument(Document::Ptr doc) ...@@ -528,6 +536,8 @@ Document::Ptr CppPreprocessor::switchDocument(Document::Ptr doc)
CppModelManager::CppModelManager(QObject *parent) CppModelManager::CppModelManager(QObject *parent)
: CppModelManagerInterface(parent) : CppModelManagerInterface(parent)
{ {
m_synchronizer.setCancelOnWait(true);
m_core = Core::ICore::instance(); // FIXME m_core = Core::ICore::instance(); // FIXME
m_dirty = true; m_dirty = true;
...@@ -702,6 +712,8 @@ QFuture<void> CppModelManager::refreshSourceFiles(const QStringList &sourceFiles ...@@ -702,6 +712,8 @@ QFuture<void> CppModelManager::refreshSourceFiles(const QStringList &sourceFiles
QFuture<void> result = QtConcurrent::run(&CppModelManager::parse, QFuture<void> result = QtConcurrent::run(&CppModelManager::parse,
preproc, sourceFiles); preproc, sourceFiles);
m_synchronizer.addFuture(result);
if (sourceFiles.count() > 1) { if (sourceFiles.count() > 1) {
m_core->progressManager()->addTask(result, tr("Indexing"), m_core->progressManager()->addTask(result, tr("Indexing"),
CppTools::Constants::TASK_INDEX, CppTools::Constants::TASK_INDEX,
......
...@@ -38,6 +38,7 @@ ...@@ -38,6 +38,7 @@
#include <QMap> #include <QMap>
#include <QFutureInterface> #include <QFutureInterface>
#include <QFutureSynchronizer>
#include <QMutex> #include <QMutex>
#include <QTimer> #include <QTimer>
#include <QTextEdit> #include <QTextEdit>
...@@ -174,6 +175,8 @@ private: ...@@ -174,6 +175,8 @@ private:
QList<Editor> m_todo; QList<Editor> m_todo;
QTimer *m_updateEditorSelectionsTimer; QTimer *m_updateEditorSelectionsTimer;
QFutureSynchronizer<void> m_synchronizer;
}; };
} // namespace Internal } // namespace Internal
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment