ProjectExplorer: Provide optional callbacks to RunWorker timeouts

Useful in some more complex setups.

Defaults to the tradionally unconditional reportFailure().

Change-Id: I26acaace1fa1e12caf83b785e4be539d8af7eb73
Reviewed-by: Filipe Azevedo <filipe.azevedo@kdab.com>
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
hjk
2017-10-13 17:11:26 +02:00
parent eab3a24526
commit 4fa869f6a0
2 changed files with 16 additions and 6 deletions

View File

@@ -570,8 +570,10 @@ public:
QVariantMap data; QVariantMap data;
int startWatchdogInterval = 0; int startWatchdogInterval = 0;
int startWatchdogTimerId = -1; int startWatchdogTimerId = -1;
std::function<void()> startWatchdogCallback;
int stopWatchdogInterval = 0; // 5000; int stopWatchdogInterval = 0; // 5000;
int stopWatchdogTimerId = -1; int stopWatchdogTimerId = -1;
std::function<void()> stopWatchdogCallback;
bool supportsReRunning = true; bool supportsReRunning = true;
bool essential = false; bool essential = false;
}; };
@@ -1562,10 +1564,16 @@ bool RunWorkerPrivate::canStop() const
void RunWorkerPrivate::timerEvent(QTimerEvent *ev) void RunWorkerPrivate::timerEvent(QTimerEvent *ev)
{ {
if (ev->timerId() == startWatchdogTimerId) { if (ev->timerId() == startWatchdogTimerId) {
if (startWatchdogCallback)
startWatchdogCallback();
else
q->reportFailure(tr("Worker start timed out.")); q->reportFailure(tr("Worker start timed out."));
return; return;
} }
if (ev->timerId() == stopWatchdogTimerId) { if (ev->timerId() == stopWatchdogTimerId) {
if (stopWatchdogCallback)
stopWatchdogCallback();
else
q->reportFailure(tr("Worker stop timed out.")); q->reportFailure(tr("Worker stop timed out."));
return; return;
} }
@@ -1760,14 +1768,16 @@ void RunWorker::setId(const QString &id)
d->id = id; d->id = id;
} }
void RunWorker::setStartTimeout(int ms) void RunWorker::setStartTimeout(int ms, const std::function<void()> &callback)
{ {
d->startWatchdogInterval = ms; d->startWatchdogInterval = ms;
d->startWatchdogCallback = callback;
} }
void RunWorker::setStopTimeout(int ms) void RunWorker::setStopTimeout(int ms, const std::function<void()> &callback)
{ {
d->stopWatchdogInterval = ms; d->stopWatchdogInterval = ms;
d->stopWatchdogCallback = callback;
} }
void RunWorker::recordData(const QString &channel, const QVariant &data) void RunWorker::recordData(const QString &channel, const QVariant &data)

View File

@@ -347,8 +347,8 @@ public:
void setDisplayName(const QString &id) { setId(id); } // FIXME: Obsoleted by setId. void setDisplayName(const QString &id) { setId(id); } // FIXME: Obsoleted by setId.
void setId(const QString &id); void setId(const QString &id);
void setStartTimeout(int ms); void setStartTimeout(int ms, const std::function<void()> &callback = {});
void setStopTimeout(int ms); void setStopTimeout(int ms, const std::function<void()> &callback = {});
void recordData(const QString &channel, const QVariant &data); void recordData(const QString &channel, const QVariant &data);
QVariant recordedData(const QString &channel) const; QVariant recordedData(const QString &channel) const;