BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
FitWorkerLauncher.cpp
Go to the documentation of this file.
1 // ************************************************************************************************
2 //
3 // BornAgain: simulate and fit reflection and scattering
4 //
5 //! @file GUI/coregui/Views/FitWidgets/FitWorkerLauncher.cpp
6 //! @brief Implements class FitWorkerLauncher
7 //!
8 //! @homepage http://www.bornagainproject.org
9 //! @license GNU General Public License v3 or higher (see COPYING)
10 //! @copyright Forschungszentrum Jülich GmbH 2018
11 //! @authors Scientific Computing Group at MLZ (see CITATION, AUTHORS)
12 //
13 // ************************************************************************************************
14 
17 #include <QThread>
18 
20  : QObject(parent), m_is_fit_running(false), m_duration(0)
21 {
22 }
23 
24 void FitWorkerLauncher::runFitting(std::shared_ptr<FitObjectiveBuilder> suite)
25 {
26  if (!suite || m_is_fit_running)
27  return;
28 
29  auto thread = new QThread();
30  auto fw = new FitWorker(suite);
31  fw->moveToThread(thread);
32 
33  // start fitting when thread starts
34  connect(thread, &QThread::started, fw, &FitWorker::startFit);
36 
38  &FitWorker::interruptFitting, Qt::DirectConnection);
39 
42 
43  // delete fitting worker and thread when done
44  connect(fw, &FitWorker::finished, fw, &FitWorker::deleteLater);
45  connect(thread, &QThread::finished, thread, &QThread::deleteLater);
46 
47  m_is_fit_running = true;
48  thread->start();
49 }
50 
51 //! Returns duration of fit in msec.
52 
54 {
55  return m_duration;
56 }
57 
59 {
60  if (m_is_fit_running)
62 }
63 
65 {
66  m_is_fit_running = false;
67  m_duration = duration;
68  emit fittingFinished();
69 }
70 
72 {
73  emit fittingStarted();
74 }
75 
76 void FitWorkerLauncher::intern_error(const QString& mesg)
77 {
78  emit fittingError(mesg);
79 }
Implements class FitWorkerLauncher.
Implements class FitWorker.
void runFitting(std::shared_ptr< FitObjectiveBuilder > suite)
FitWorkerLauncher(QObject *parent)
void intern_interruptFittingWorker()
std::atomic< bool > m_is_fit_running
void fittingError(const QString &message)
void intern_error(const QString &mesg)
void intern_workerFinished(int duration)
int getDuration()
Returns duration of fit in msec.
void interruptFitting()
Definition: FitWorker.cpp:36
void finished(int duration)
void startFit()
Definition: FitWorker.cpp:19
void started()
void error(const QString &message)