003
26.08.2003, 14:48 Uhr
virtual
Sexiest Bit alive (Operator)
|
Ich kenne mich weder mit QT noch mit KDE aus. Folglich kann Ich Dir nicht helfen, wenn es ein "Slot" Spezifisches Problem ist. Ich weiß nämlich noch nicht mal was ein Slot ist, hört sich aber schweinisch an.
Was pthread_create angeht kann ich Dir vielleicht schon eher helfen: Das startet ja einen Thread, wobei du neben dem Eintrittpunkt zu diesem Thread noch ein völlig (sinn)freies Argument mitlieferst. Startest Du also Deinen Thread mit
C++: |
void* data pthread_create(deine_thread_function, data);
|
So wird der Thread deine_thread_function ausführen, wobei data als Parameter mitgelifert wird. Normalerweise wird man nun - zumindestens wenn wir über C++ reden - versuchen, letztlich nicht eine Funktion, sondern eine Methode eines Objekts aufzurufen. Der wesentliche Gedanke ist dann, daß man der Threadfunktion einen Pointer auf das Objekt übergibt und die Threadfunktion nichts anderes macht, als die Methode aufzurufen.
Eine rudimentäre Threadklasse sieht damit etwa so aus (ich verzichte mal auf Fehlerbehandlung, um es komprimiert darzustellen):
C++: |
class Thread { private: // Ein kleiner Helper static void* CallbackForPthread(void* pthis) { Thread* pthrd = reinterpret_cast<Thread*>(pthis); return pthrd->run(); } protected: // Diese Methode wird im Thread ausgeführt, in abgeleiteteten Klassen // zu implementieren; hier nur abstract virtual void* execute() = 0;
public: // Diese Methode wird benutzt, um den Thread zu starten void start() { pthread_create(&Thread::CallbackForPthread, this); } };
|
Anwenden kann man das dann so:
C++: |
class DeinThread: public Thread { protected: virtual void* execute() { /* Dein Code */ } };
int main() { DeinThread thrd;
thrd.start(); // Starte Thread ... }
|
Da der ganze Kram nun in einer Klasse ist, kannst es problemlos mit anderen Klassen kombinieren -wahlweise über aggregation oder mehrfachvererbung.
Ist das etwa die Richtung, die du brauchst, oder habe ich dich "vermißverstanden"? -- Gruß, virtual Quote of the Month Ich eß' nur was ein Gesicht hat (Creme 21) Dieser Post wurde am 26.08.2003 um 14:49 Uhr von virtual editiert. |