2011-01-16 12 views
0

Ich möchte eine Klasse machen, die ein paar virtuelle Funktionen enthält, die auf verschiedene Ereignisse genannt werden. Ich habe die Klasse schon, aber wie starte ich diese Funktionen als neue Threads? Ich kann das nur mit globalen Funktionen machen. Ich möchte, dass meine Klasse wie folgt aussehen:New Thread auf einer Klassenfunktion

class Callbackk{ 
    CallBack(){}; 
    virtual ~Callback(){}; 

    virtual void onSomething(); 
    virtual void onElse(Someclass x); 
    virtual void onBum(Newclass nc); 
} 

würde natürlich jede Funktion mit verschiedenen Parametern aufgerufen werden, aber die Idee ist, dass ich diese Funktionen nichtig sein wollen und in der Lage, einige Argumente zu akzeptieren.

verwenden: Visual Studio 2010

Antwort

4

Verschiedene Gewindemechanismen verwenden eine andere Syntax für diesen Fall.

ich das Beispiel für boost::thread Bibliothek liefern.

Offensichtlich haben Sie Ihre Funktion zu einem gewissen Klasseninstanz zu binden, für sie aufgerufen werden. Dies kann folgendermaßen erreicht werden:

// Thread constructor is a template and accepts any object that models 'Callable' 
// Note that the thread is automatically started after it's construction. 
// So... 

// This is the instance of your class, can possibly be some derived 
// instance, whatever actually. 
Callback* callback_instance; 

// This construction would automatically start a new thread running the 
// 'onElse' handler with the supplied arguments. 

// Note that you may want to make 'x' a member of your thread controlling 
// class to make thread suspending and other actions possible. 

// You also may want to have something like 'std::vector<boost::thread>' created 
// for your case. 
boost::thread x(boost::bind(&Callback::onElse, callback_instance, ARGUMENTS)); 
+0

+1. Für ein weiteres Beispiel dieser Technik der Verwendung http://stackoverflow.com/questions/86046/best-way-to-start-a-thread-as-a-member-of-a-c-class/86253#86253 – ravenspoint

0

Mein Vorschlag ist, dass Sie einige statische Elementfunktionen in Ihrer Klasse hinzufügen, um dies zu tun. Sie könnten beispielsweise eine statische Elementfunktion namens onSomethingThread hinzufügen, die die gleichen Funktionen wie die Funktion onSomething ausführt. Dann erstellen Sie in der Funktion onSomething einfach einen neuen Thread und führen onSomethingThread darin aus.

Verwandte Themen