ewmscp  ..
waitQueuesTest.cpp
Go to the documentation of this file.
1 #include "../waitQueues.h"
2 #include <iostream>
3 #include <thread>
4 #include <vector>
5 #include <chrono>
6 
7 void o2s(int i,
10  std::this_thread::sleep_for(std::chrono::milliseconds(i*100));
11  std::cout << "start worker " << i << std::endl;
12  while (auto item = oq.dequeue()) {
13  sq.enqueue(item);
14  std::this_thread::sleep_for(std::chrono::seconds(1));
15  }
16  std::cout << "stop worker " << i << std::endl;
17 }
18 
19 int main(int argc, const char*argv[]) {
20  std::cout << argv[0] << "\n";
23 
24  std::vector<std::thread> workers;
25  for (auto i=argc; i ; --i) {
26  workers.emplace_back(o2s, i, std::ref(sq), std::ref(oq));
27  }
28  std::thread overseer(sq.signalDoneThread(workers.begin(),workers.end()));
29 
30 
31  for (int i=0; i<20; i++) {
32  oq.emplace(i);
33  std::cout << "enqueue " << i << std::endl;
34  }
35  oq.enqueue(nullptr);
36  std::cout << "\n";
37 
38 
39  std::cout << "start dequeing" << std::endl;
40  while (auto item=sq.dequeue()) {
41  std::cout << *item << " ";
42  std::cout.flush();
43  delete item;
44  }
45  std::cout << "\n";
46  oq.enqueue(nullptr);
47  return 0;
48 }
waitQueues::ordered::enqueue
void enqueue(std::unique_ptr< T > &item)
Definition: waitQueues.h:139
o2s
void o2s(int i, waitQueues::simple< int > &sq, waitQueues::ordered< int > &oq)
Definition: waitQueuesTest.cpp:7
waitQueues::simple::signalDoneThread
std::thread signalDoneThread(iterType begin, iterType end)
Definition: waitQueues.h:112
waitQueues::ordered::dequeue
std::unique_ptr< T > dequeue(durationType timeout, bool &timedOut)
Definition: waitQueues.h:162
waitQueues::simple::enqueue
void enqueue(std::unique_ptr< T > &item)
Definition: waitQueues.h:37
waitQueues::simple
Definition: waitQueues.h:31
waitQueues::ordered::emplace
void emplace(Types ... args)
Definition: waitQueues.h:148
waitQueues::simple::dequeue
std::unique_ptr< T > dequeue(bool mayCreateNew, Types ... args)
Definition: waitQueues.h:59
main
int main(int argc, const char *argv[])
Definition: waitQueuesTest.cpp:19
waitQueues::ordered
Definition: waitQueues.h:133