Fix job tests on Win, don't use usleep()

This commit is contained in:
tamasmeszaros 2021-12-02 15:34:20 +01:00
parent 583c123c97
commit e367ef8011

View File

@ -1,8 +1,13 @@
#include "catch2/catch.hpp" #include "catch2/catch.hpp"
#include <chrono>
#include <thread>
#include "slic3r/GUI/Jobs/BoostThreadWorker.hpp" #include "slic3r/GUI/Jobs/BoostThreadWorker.hpp"
#include "slic3r/GUI/Jobs/ProgressIndicator.hpp" #include "slic3r/GUI/Jobs/ProgressIndicator.hpp"
//#include <boost/thread/thread.hpp>
struct Progress: Slic3r::ProgressIndicator { struct Progress: Slic3r::ProgressIndicator {
int range = 100; int range = 100;
int pr = 0; int pr = 0;
@ -68,7 +73,7 @@ TEST_CASE("Cancellation should be recognized be the worker", "[Jobs]") {
worker, worker,
[](Job::Ctl &ctl) { [](Job::Ctl &ctl) {
for (int s = 0; s <= 100; ++s) { for (int s = 0; s <= 100; ++s) {
usleep(10000); std::this_thread::sleep_for(std::chrono::milliseconds(10));
ctl.update_status(s, "Running"); ctl.update_status(s, "Running");
if (ctl.was_canceled()) break; if (ctl.was_canceled()) break;
} }
@ -77,7 +82,7 @@ TEST_CASE("Cancellation should be recognized be the worker", "[Jobs]") {
REQUIRE(cancelled == true); REQUIRE(cancelled == true);
}); });
usleep(1000); std::this_thread::sleep_for(std::chrono::milliseconds(1));
worker.cancel(); worker.cancel();
while (!worker.is_idle()) while (!worker.is_idle())
@ -95,12 +100,24 @@ TEST_CASE("cancel_all should remove all pending jobs", "[Jobs]") {
std::array<bool, 4> jobres = {false}; std::array<bool, 4> jobres = {false};
queue_job(worker, [&jobres](Job::Ctl &) { jobres[0] = true; usleep(1000); }); queue_job(worker, [&jobres](Job::Ctl &) {
queue_job(worker, [&jobres](Job::Ctl &) { jobres[1] = true; usleep(1000); }); jobres[0] = true;
queue_job(worker, [&jobres](Job::Ctl &) { jobres[2] = true; usleep(1000); }); std::this_thread::sleep_for(std::chrono::milliseconds(1));
queue_job(worker, [&jobres](Job::Ctl &) { jobres[3] = true; usleep(1000); }); });
queue_job(worker, [&jobres](Job::Ctl &) {
jobres[1] = true;
std::this_thread::sleep_for(std::chrono::milliseconds(1));
});
queue_job(worker, [&jobres](Job::Ctl &) {
jobres[2] = true;
std::this_thread::sleep_for(std::chrono::milliseconds(1));
});
queue_job(worker, [&jobres](Job::Ctl &) {
jobres[3] = true;
std::this_thread::sleep_for(std::chrono::milliseconds(1));
});
usleep(500); std::this_thread::sleep_for(std::chrono::microseconds(500));
worker.cancel_all(); worker.cancel_all();
REQUIRE(jobres[0] == true); REQUIRE(jobres[0] == true);