boost signals und threads möglich?
-
hallo ich hab mal eine frage
ich hab eine klasse die
so grob aussiehtclass A { public: void run(); A(void){}; virtual ~A(void){}; void operator()(){run();} boost::signal<void ()> sig; };und dies klasse die ein neues thread erzeugt
class B { public: bool tick(); B(void) { boost::thread runThread(m_A); runThread.join(); } ~B(void){}; private: A m_A; };wenn ich das jetzt kompiliere bekomm ich folgende fehlermeldung vom MSVC8.0
1>c:\boost\include\boost-1_38\boost\signals\detail\signal_base.hpp(150) : error C2248: "boost::noncopyable_::noncopyable::noncopyable": Kein Zugriff auf private Member, dessen Deklaration in der boost::noncopyable_::noncopyable-Klasse erfolgte.
1> c:\boost\include\boost-1_38\boost\noncopyable.hpp(27): Siehe Deklaration von 'boost::noncopyable_::noncopyable::noncopyable'
1> c:\boost\include\boost-1_38\boost\noncopyable.hpp(22): Siehe Deklaration von 'boost::noncopyable_::noncopyable'
1> Diese Diagnose trat in der vom Compiler generierten Funktion "boost::signals::detail::signal_base::signal_base(const boost::signals::detail::signal_base &)" auf.wenn ich jetzt das signal auskommentier kann ich das programm ohne problem kompilieren
mein ziehl war es die komunikation zwischen den beiden klassen wie in qt über das signal slot konzept laufen zulassen
ist es überhaupt mit boost möglich das was ich vorhab?
mfg 123
-
Soweit ich mich erinnere, war das Signal-Slot sowas wie Funktionszeiger? Falls ja, schau mal bei boost::function vorbei.
-
danke bin dadrauf auch schon gekommen
muss nur noch schaun ob es funktioniert
wie ich es will werd es morgen aber erst machen könnenzumindest kann ich jetzt ne exe erzeugen mit function
noch mals danke
-
ich hab das mit boost::function noch nicht getestet
aber mich würd interressieren warum es diese fehlermeldung überhaupt gibt wenn ich
bei dieser konstullation in class a ein boost:signal einfüg
kann das mir vll jemande erklären
-
Das Objekt, welches man dem Konstruktor von boost::thread übergibt, wird innendrin kopiert. Da die boost::signal-Klasse anscheinend unkopierbar ist (und damit auch Klasse A unkopierbar ist), klappt das nicht.
-
ok danke für die informationen

vll ändern die das ja noch fänd ich schön würde es flexibler machen
aber beschweren darf man sich ja nicht soll doch froh sein was die einem anbieten