ewmscp  ..
Functions
waitQueuesTest.cpp File Reference

(v0.19-24-g0617ca1 with changes)

#include "../waitQueues.h"
#include <iostream>
#include <thread>
#include <vector>
#include <chrono>
Include dependency graph for waitQueuesTest.cpp:

Go to the source code of this file.

Functions

void o2s (int i, waitQueues::simple< int > &sq, waitQueues::ordered< int > &oq)
 
int main (int argc, const char *argv[])
 

Function Documentation

◆ main()

int main ( int  argc,
const char *  argv[] 
)

Definition at line 19 of file waitQueuesTest.cpp.

19  {
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 }

References waitQueues::simple< T >::dequeue(), waitQueues::ordered< T, ascending, Container >::emplace(), waitQueues::ordered< T, ascending, Container >::enqueue(), o2s(), and waitQueues::simple< T >::signalDoneThread().

Here is the call graph for this function:

◆ o2s()

void o2s ( int  i,
waitQueues::simple< int > &  sq,
waitQueues::ordered< int > &  oq 
)

Definition at line 7 of file waitQueuesTest.cpp.

9  {
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 }

References waitQueues::ordered< T, ascending, Container >::dequeue(), and waitQueues::simple< T >::enqueue().

Referenced by main().

Here is the call graph for this function:
Here is the caller graph for this function:
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
waitQueues::ordered
Definition: waitQueues.h:133