boost signals und threads möglich?



  • hallo ich hab mal eine frage
    ich hab eine klasse die
    so grob aussieht

    class 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önnen

    zumindest 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.

    Siehe auch: http://www.boost.org/doc/libs/1_38_0/doc/html/thread/thread_management.html#thread.thread_management.thread.callable_constructor



  • 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


Anmelden zum Antworten