source: trunk/src/halSignaler.hpp @ 404

Revision 404, 1.1 KB checked in by Eoin, 12 years ago (diff)

Some threading bug with the LogListView?!

Line 
1
2#pragma once
3
4#include <boost/signal.hpp>
5
6#include "halEvent.hpp"
7
8namespace hal
9{
10
11struct once
12{
13        template<typename S>
14        once(S& s, boost::function<void ()> f) :
15                f_(f)
16        {
17                c_ = s.connect(*this);
18                HAL_DEV_MSG(L"Once ctor");
19        }
20
21        void operator()() 
22        {
23                HAL_DEV_MSG(L"Once");
24
25                f_();
26               
27                HAL_DEV_MSG(L"Once disconnecting");
28
29                c_.disconnect();
30        }
31
32        boost::function<void ()> f_;
33        boost::signals::connection c_;
34};
35
36template<typename S=boost::signal<void()> >
37class signaler
38{
39public:
40
41        void connect_repeat(const typename S::slot_type& slot)
42        {
43                HAL_DEV_MSG(L"connect_repeat");
44                repeat_.connect(slot);
45        }
46
47        void connect_once(const typename S::slot_type& slot)
48        {
49                HAL_DEV_MSG(L"connect_once");
50                once_.connect(slot);
51        }
52
53        void operator()() 
54        {
55                HAL_DEV_MSG(L"operator()");
56                repeat_();
57
58                once_();
59                once_.disconnect_all_slots();
60                HAL_DEV_MSG(L"Once disconnected");
61        }       
62
63        void disconnect_all_once()
64        {
65                once_.disconnect_all_slots();
66                HAL_DEV_MSG(L"All disconnected");
67        }
68
69private:
70        S repeat_;
71        S once_;
72};
73
74}
Note: See TracBrowser for help on using the repository browser.