bonjour.

je test boost signal. et je 'arrive pas a declencher un signal dans le slot d'un autre signal.
Est-ce impossible de declencher un signal dans le context d'un autre signal ?

voici mon code de test

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
 
#include <boost/signal.hpp>
#include <boost/bind.hpp>
#include <iostream>
#include <string>
 
class		controler
{
public:
    typedef boost::signal<void (std::string)>  signal_t;
    typedef boost::signals::connection  connection_t;
 
  controler()
  {}
 
  controler(const controler&)
  {}
 
  connection_t		registerSignal(signal_t::slot_function_type slot)
  {
	  return m_sig.connect(slot);
  }
 
  void		connectSignal(std::string data)
  {
	  std::cout << "connectSignal recv: " << data << std::endl;
	  m_sig(data);
  }
 
private:
  signal_t    m_sig;
};
 
class				user
{
public:
   user(controler& c)
   {
	c.registerSignal(boost::bind(&user::slot, this, _1));
   }
 
   void			slot(std::string data) const
   {
	std::cout << "signal conteroler -> user ok" << std::endl;
	std::cout << typeid(this).name() << " -> " << data << std::endl;
   }
};
 
int				main()
{
  controler	control;
  user		u1(control);
 
  boost::signal<void (std::string)>		mainSignal;
  mainSignal.connect(boost::bind(&controler::connectSignal, control, _1));
  mainSignal("message de test");
  return 0;
}
la methode controler::connectSignal est bien appelle mais ne declenche pas le signal. Par contre si j'appelle controler::connectSignal directement le signal est bien declencher et user::slot est appeller.

Quelqu'un c'est pourquoi ?

merci d'avance