Thread in einer Klasse



  • Ist es möglich eine "Thread-Methode" in einer Klasse zu haben? Also das ich praktisch eine Methode einer Klasse als Thread aufrufen kann? (WINDOWS C++)

    danke



  • Also ich kenne die WinAPI nicht, aber unter Linux funktioniert das mit statischen Member Funktionen. Eventuell unter Windows ähnlich.

    PS: falsches Forum...



  • Mit boost::thread kannst Du auch eine Methode einer Klasse als Threadfunktion nutzen 😉



  • soo also folgendes:
    Du brauchst eine statische Funktion damit das geht:

    template <typename Tobj, Tp1, Tp2>
    struct thread_proc
    {
    	template <typename Tobj, Tp1, Tp2>
    	struct data
    	{
    		Tobj*		obj;
    		typedef (Tobj::*func)(Tp1 const&, Tp2 const&);
    		func	fnPtr;
    		Tp1		p1;
    		Tp2		p2;
    		data(Tobj* obj, func fnPtr, Tp1 const& p1, Tp1 const& p2) 
    			: obj(obj), fnPtr(fnPtr), p1(p1), p2(p2) {}
    	} m_data;
    	static DWORD method(LPVOID* data)
    	{
    		data<Tobj, Tp1, Tp2>* struct_data(static_cast<data<Tobj, Tp1, Tp2>*>(data));
    		(struct_data->obj->*func)(struct_data->p1, struct_data->p2);
    	}
    	thread_proc(Tobj* ptrObj, Tp1 const& p1, Tp1 const& p2) : 
    };
    

    ... So, das sieht komplex aus, ist aber eigtl. relativ einfach ... hab gerade aber keine Zeit das zu erklären ...

    thread_proc<foo, int, short>::data my_data(&foo, &foo::thread_handler, 10, 10);
    

    deine Daten und wenn du halt Parameter übergeben willst halt den Typ (int und short in dem Fall) und dann halt die entsprechenden Werte angeben ...

    &thread_proc<foo, int, short>::method
    

    als Funktion angeben und dann als Parameter einen Zeiger auf deine my_data-Strukture angeben. Fertig 😛

    Achja noch ein Hinweiß:
    Ein Typedef ist da nen praktisches DingsBums ...^^
    @danke für den Hinweiß mit dem Tobj statt T ... Tippfehler 😛



  • BOhaa, was ist das. Da brauche ich ja eine Woche um das zu verstehen 😃

    Ich schau mir das mal genauer an, danke. 🙂



  • typedef (Tobj::*func)(Tp1 const&, Tp2 const&);
    

Anmelden zum Antworten