JFJochStateMachine: Enable async workflow to start measurement
Build Packages / build:rpm (rocky8_nocuda) (push) Successful in 11m20s
Build Packages / build:rpm (ubuntu2404_nocuda) (push) Successful in 14m50s
Build Packages / build:rpm (ubuntu2204_nocuda) (push) Successful in 15m26s
Build Packages / build:rpm (rocky9_nocuda) (push) Successful in 15m50s
Build Packages / build:rpm (rocky8) (push) Successful in 17m31s
Build Packages / build:rpm (rocky8_sls9) (push) Successful in 17m48s
Build Packages / build:rpm (rocky9) (push) Successful in 18m40s
Build Packages / build:rpm (rocky9_sls9) (push) Successful in 18m50s
Build Packages / Generate python client (push) Successful in 1m44s
Build Packages / Build documentation (push) Successful in 2m6s
Build Packages / Create release (push) Has been skipped
Build Packages / build:rpm (ubuntu2204) (push) Successful in 10m18s
Build Packages / build:rpm (ubuntu2404) (push) Successful in 10m18s
Build Packages / XDS test (durin plugin) (push) Successful in 11m3s
Build Packages / XDS test (neggia plugin) (push) Successful in 9m5s
Build Packages / XDS test (JFJoch plugin) (push) Successful in 9m35s
Build Packages / DIALS test (push) Successful in 13m58s
Build Packages / Unit tests (push) Successful in 1h14m28s
Build Packages / build:rpm (rocky8_nocuda) (push) Successful in 11m20s
Build Packages / build:rpm (ubuntu2404_nocuda) (push) Successful in 14m50s
Build Packages / build:rpm (ubuntu2204_nocuda) (push) Successful in 15m26s
Build Packages / build:rpm (rocky9_nocuda) (push) Successful in 15m50s
Build Packages / build:rpm (rocky8) (push) Successful in 17m31s
Build Packages / build:rpm (rocky8_sls9) (push) Successful in 17m48s
Build Packages / build:rpm (rocky9) (push) Successful in 18m40s
Build Packages / build:rpm (rocky9_sls9) (push) Successful in 18m50s
Build Packages / Generate python client (push) Successful in 1m44s
Build Packages / Build documentation (push) Successful in 2m6s
Build Packages / Create release (push) Has been skipped
Build Packages / build:rpm (ubuntu2204) (push) Successful in 10m18s
Build Packages / build:rpm (ubuntu2404) (push) Successful in 10m18s
Build Packages / XDS test (durin plugin) (push) Successful in 11m3s
Build Packages / XDS test (neggia plugin) (push) Successful in 9m5s
Build Packages / XDS test (JFJoch plugin) (push) Successful in 9m35s
Build Packages / DIALS test (push) Successful in 13m58s
Build Packages / Unit tests (push) Successful in 1h14m28s
This commit is contained in:
@@ -344,7 +344,7 @@ void JFJochStateMachine::Trigger() {
|
||||
services.Trigger();
|
||||
}
|
||||
|
||||
void JFJochStateMachine::Start(const DatasetSettings &settings) {
|
||||
void JFJochStateMachine::Start(const DatasetSettings &settings, bool async) {
|
||||
std::unique_lock ul(m);
|
||||
|
||||
if (state != JFJochState::Idle)
|
||||
@@ -363,18 +363,16 @@ void JFJochStateMachine::Start(const DatasetSettings &settings) {
|
||||
|
||||
experiment.IncrementRunNumber();
|
||||
|
||||
try {
|
||||
SetState(JFJochState::Busy, "Preparing measurement", BrokerStatus::MessageSeverity::Info);
|
||||
services.SetSpotFindingSettings(GetSpotFindingSettings());
|
||||
services.Start(experiment, pixel_mask, calibration.get());
|
||||
SetState(JFJochState::Busy, "Preparing measurement", BrokerStatus::MessageSeverity::Info);
|
||||
measurement = std::async(std::launch::async, &JFJochStateMachine::MeasurementThread, this);
|
||||
if (!async)
|
||||
c.wait(ul, [&]() { return state != JFJochState::Busy; });
|
||||
}
|
||||
|
||||
SetState(JFJochState::Measuring, "Measuring ...", BrokerStatus::MessageSeverity::Info);
|
||||
measurement = std::async(std::launch::async, &JFJochStateMachine::MeasurementThread, this);
|
||||
} catch (const std::exception &e) {
|
||||
SetState(JFJochState::Error, e.what(), BrokerStatus::MessageSeverity::Error);
|
||||
services.Cancel();
|
||||
throw;
|
||||
}
|
||||
JFJochState JFJochStateMachine::WaitTillNotBusy(std::chrono::milliseconds timeout) {
|
||||
std::unique_lock ul(m);
|
||||
c.wait_for(ul, timeout, [&]() { return state != JFJochState::Busy; });
|
||||
return state;
|
||||
}
|
||||
|
||||
void JFJochStateMachine::UpdatePixelMaskStatistics(const PixelMaskStatistics &input) {
|
||||
@@ -388,6 +386,24 @@ PixelMaskStatistics JFJochStateMachine::GetPixelMaskStatistics() const {
|
||||
}
|
||||
|
||||
void JFJochStateMachine::MeasurementThread() {
|
||||
try {
|
||||
services.SetSpotFindingSettings(GetSpotFindingSettings());
|
||||
services.Start(experiment, pixel_mask, calibration.get());
|
||||
{
|
||||
std::unique_lock ul(m);
|
||||
SetState(JFJochState::Measuring, "Measuring ...", BrokerStatus::MessageSeverity::Info);
|
||||
}
|
||||
c.notify_all();
|
||||
} catch (std::exception &e) {
|
||||
{
|
||||
std::unique_lock ul(m);
|
||||
SetState(JFJochState::Error, e.what(), BrokerStatus::MessageSeverity::Error);
|
||||
}
|
||||
services.Cancel();
|
||||
c.notify_all();
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
auto tmp_output = services.Stop();
|
||||
{
|
||||
|
||||
@@ -152,7 +152,9 @@ public:
|
||||
void Initialize();
|
||||
void Pedestal();
|
||||
void Deactivate();
|
||||
void Start(const DatasetSettings& settings);
|
||||
void Start(const DatasetSettings& settings, bool async = false);
|
||||
JFJochState WaitTillNotBusy(std::chrono::milliseconds timeout);
|
||||
|
||||
BrokerStatus WaitTillMeasurementDone();
|
||||
BrokerStatus WaitTillMeasurementDone(std::chrono::milliseconds timeout);
|
||||
void Trigger();
|
||||
|
||||
Reference in New Issue
Block a user