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