]> git.llucax.com Git - software/eventxx.git/blob - test/prio-test.cpp
Fixed the main documentation example which was *WRONG*.
[software/eventxx.git] / test / prio-test.cpp
1 #include <eventxx>
2 #include <iostream>
3 #include <map>
4 #include <csignal>
5
6 using eventxx::dispatcher;
7
8 #define OSASSERT(func, ...) if (func(__VA_ARGS__) == -1) { perror(#func "()"); exit(1); }
9
10 struct handler
11 {
12         dispatcher& d;
13         int fds[4];
14         std::map< int, eventxx::basic_event* > events;
15         handler(dispatcher& d): d(d)
16         {
17                 OSASSERT(pipe, fds);
18                 OSASSERT(pipe, fds+2);
19         }
20         void add(eventxx::basic_event& e)
21         {
22                 events[e.fd()] = &e;
23         }
24         void operator() (int fd, eventxx::type event)
25         {
26                 char buf[7];
27                 OSASSERT(read, fd, buf, 7);
28                 std::cout << "Read from fd " << fd << ": " << buf << "\n";
29                 d.del(*events[fd]);
30         }
31 };
32
33 int main()
34 {
35         dispatcher d(2);
36         handler h(d);
37         OSASSERT(write, h.fds[1], "hola 1", 7);
38         OSASSERT(write, h.fds[3], "hola 2", 7);
39         eventxx::event< handler > e1(h.fds[0], eventxx::READ, h);
40         eventxx::event< handler > e2(h.fds[2], eventxx::READ, h);
41         h.add(e1);
42         h.add(e2);
43         d.add(e1, 1);
44         d.add(e2, 0);
45         d.dispatch();
46         return 0;
47 }
48