53 ChimeraTK::Device device;
55 device.activateAsyncRead();
57 ScalarRegisterAccessor<int32_t> acc(
58 device.getScalarRegisterAccessor<int32_t>(
"MYDUMMY/SOME_ZMQINT", 0, {AccessMode::wait_for_new_data}));
60 BOOST_CHECK(acc.readNonBlocking() ==
false);
68 while(!acc.readNonBlocking() || ++ic < 10) {
69 DoocsServerTestHelper::runUpdate();
76 BOOST_CHECK(acc.readNonBlocking() ==
false);
79 DoocsServerTestHelper::doocsSet(
"//MYDUMMY/SOME_ZMQINT", 1);
80 DoocsServerTestHelper::runUpdate();
82 CHECK_TIMEOUT(acc.readNonBlocking() ==
true, 300000);
83 BOOST_CHECK_EQUAL(acc, 2);
84 BOOST_CHECK(acc.readNonBlocking() ==
false);
87 DoocsServerTestHelper::runUpdate();
88 DoocsServerTestHelper::runUpdate();
89 DoocsServerTestHelper::runUpdate();
92 BOOST_CHECK_EQUAL(acc, 3);
93 CHECK_TIMEOUT(acc.readNonBlocking() ==
true, 30000);
94 BOOST_CHECK_EQUAL(acc, 4);
96 BOOST_CHECK_EQUAL(acc, 5);
100 std::atomic<bool> readFinished(
false);
101 std::promise<void> prom;
102 std::future<void> fut = prom.get_future();
103 std::thread readAsync([&acc, &prom, &readFinished]() {
108 fut.wait_for(std::chrono::milliseconds(500));
109 BOOST_CHECK(readFinished ==
false);
110 DoocsServerTestHelper::runUpdate();
111 fut.wait_for(std::chrono::milliseconds(500));
112 BOOST_CHECK(readFinished ==
true);
118 std::atomic<bool> threadInterrupted(
false);
119 std::promise<void> prom;
120 std::future<void> fut = prom.get_future();
121 std::thread readAsync([&acc, &prom, &threadInterrupted]() {
125 catch(boost::thread_interrupted&) {
127 threadInterrupted =
true;
131 fut.wait_for(std::chrono::milliseconds(500));
132 BOOST_CHECK(threadInterrupted ==
false);
133 acc.getHighLevelImplElement()->interrupt();
134 fut.wait_for(std::chrono::milliseconds(500));
135 BOOST_CHECK(threadInterrupted ==
true);