[boost::signal] declencher un signal dans un slot
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:
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