Skip to content

Commit

Permalink
Fix PlaterWorker not calling yield from main thread
Browse files Browse the repository at this point in the history
Also fix UIThreadWorker not setting busy cursor
  • Loading branch information
tamasmeszaros committed Jun 1, 2022
1 parent fe9ad66 commit cf16daf
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 6 deletions.
12 changes: 7 additions & 5 deletions src/slic3r/GUI/Jobs/PlaterWorker.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -38,22 +38,24 @@ class PlaterWorker: public Worker {

void update_status(int st, const std::string &msg = "") override
{
wxWakeUpIdle();
ctl.update_status(st, msg);

// If the worker is not using additional threads, the UI
// is refreshed with this call. If the worker is running
// in it's own thread, the yield should not have any
// visible effects.
wxYieldIfNeeded();
// in it's own thread, this will be one additional
// evaluation of the event loop which should have no visible
// effects.
call_on_main_thread([] { wxYieldIfNeeded(); });
}

bool was_canceled() const override { return ctl.was_canceled(); }

std::future<void> call_on_main_thread(std::function<void()> fn) override
{
auto ftr = ctl.call_on_main_thread(std::move(fn));
wxWakeUpIdle();
return ctl.call_on_main_thread(std::move(fn));

return ftr;
}

} wctl{c};
Expand Down
10 changes: 9 additions & 1 deletion src/slic3r/GUI/Jobs/UIThreadWorker.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,15 @@ class UIThreadWorker : public Worker, private Job::Ctl {

std::future<void> call_on_main_thread(std::function<void()> fn) override
{
return std::async(std::launch::deferred, [fn]{ fn(); });
std::future<void> ftr = std::async(std::launch::deferred, [fn]{ fn(); });

// So, it seems that the destructor of std::future will not call the
// packaged function. The future needs to be accessed at least ones
// or waited upon. Calling wait() instead of get() will keep the
// returned future's state valid.
ftr.wait();

return ftr;
}

public:
Expand Down

0 comments on commit cf16daf

Please sign in to comment.