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

This commit is contained in:
2026-04-27 13:39:39 +02:00
parent 5e58f20003
commit 3cf20fb946
2 changed files with 31 additions and 13 deletions
+28 -12
View File
@@ -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();
{
+3 -1
View File
@@ -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();