45 "JobQueueData::runJob() -> Error. ISimulation is already existing.");
51 }
catch (
const std::exception& ex) {
52 QString message(
"JobQueueData::runJob() -> Error. "
53 "Attempt to create sample/instrument object from user description "
54 "has failed with following error message.\n\n");
55 message += QString::fromStdString(std::string(ex.what()));
66 auto thread =
new QThread;
67 worker->moveToThread(thread);
106 auto worker = qobject_cast<JobWorker*>(sender());
110 jobItem->setStatus(
"Running");
112 jobItem->setEndTime(QString());
119 auto worker = qobject_cast<JobWorker*>(sender());
139 auto thread = qobject_cast<QThread*>(sender());
145 auto worker = qobject_cast<JobWorker*>(sender());
156 int global_progress(0);
158 QModelIndex parentIndex;
169 global_progress /= nRunningJobs;
171 global_progress = -1;
189 if (it.value() == thread) {
190 thread->deleteLater();
196 throw GUIHelpers::Error(
"JobQueueData::assignForDeletion() -> Error! Can't find thread.");
204 worker->disconnect();
206 if (it.value() == worker) {
213 throw GUIHelpers::Error(
"JobQueueData::assignForDeletion() -> Error! Can't find the runner.");
231 if (worker->
status() ==
"Failed") {
250 return it !=
m_threads.end() ? it.value() :
nullptr;
258 return it !=
m_workers.end() ? it.value() :
nullptr;
#define ASSERT(condition)
Defines class DomainSimulationBuilder.
Defines class GISASSimulation.
Defines class GUIHelpers functions.
Defines InstrumentItems classes.
Defines class JobQueueData.
Abstract base class of OffSpecularSimulation, GISASSimulation and SpecularSimulation.
void setComments(const QString &comments)
void setResults(const ISimulation *simulation)
InstrumentItem * instrumentItem()
void setProgress(int progress)
QString getIdentifier() const
SimulationOptionsItem * simulationOptionsItem()
MultiLayerItem * multiLayerItem()
void setDuration(int duration)
void setStatus(const QString &status)
void setEndTime(const QString &end_time)
const JobItem * getJobItemForIndex(const QModelIndex &index) const
JobItem * getJobItemForIdentifier(const QString &identifier)
JobWorker * getWorker(const QString &identifier)
Returns job runner for given identifier.
void onStartedJob()
Sets JobItem properties when the job is going to start.
void focusRequest(JobItem *jobItem)
void updateGlobalProgress()
Estimates global progress from the progress of multiple running jobs and emmits appropriate signal.
QThread * getThread(const QString &identifier)
Returns the thread for given identifier.
JobQueueData(JobModel *jobModel)
ISimulation * getSimulation(const QString &identifier)
Returns the simulation (if exists) for given identifier.
void removeJob(const QString &identifier)
Remove job from list completely.
void processFinishedJob(JobWorker *worker, JobItem *jobItem)
Set all data of finished job.
void cancelJob(const QString &identifier)
Cancels running job.
QMap< QString, ISimulation * > m_simulations
job identifier to jobWorker
void clearSimulation(const QString &identifier)
void onFinishedJob()
Performs necessary actions when job is finished.
void assignForDeletion(QThread *thread)
Removes QThread from the map of known threads, assigns it for deletion.
JobModel * m_jobModel
job identifier to simulation
QMap< QString, JobWorker * > m_workers
job identifier to the thread
QMap< QString, QThread * > m_threads
void runJob(JobItem *jobItem)
Submits job and run it in a thread.
void onCancelAllJobs()
Cancels all running jobs.
The JobWorker class provides running the domain simulation in a thread.
QString failureMessage() const
QString identifier() const
int simulationDuration() const
void terminate()
Sets request for JobRunner to terminate underlying domain simulation.
virtual QModelIndex index(int row, int column, const QModelIndex &parent) const
virtual int rowCount(const QModelIndex &parent) const
std::unique_ptr< ISimulation > createSimulation(const MultiLayerItem *sampleItem, const InstrumentItem *instrumentItem, const SimulationOptionsItem *optionsItem=nullptr)
Creates domain simulation from sample and instrument items.
QString currentDateTime()