Frage

pthread in als Parameter void *(*start_routine)(void* userPtr) nimmt, ich hatte gehofft, dass ich std::mem_fun verwenden kann mein Problem zu lösen, aber ich kann nicht.

Ich möchte die Funktion void * threadFunc() verwenden und die userPtr wirken als die Klasse (userPtr->threadFunc()) haben. Gibt es eine ähnliche Funktion wie std::mem_func, dass ich verwenden kann?

War es hilfreich?

Lösung

Eine Möglichkeit ist es, eine globale Funktion zu verwenden, die Ihre Hauptthread-Funktion aufruft:

class MyThreadClass {
public:
  void main(); // Your real thread function
};

void thread_starter(void *arg) {
  reinterpret_cast<MyThreadClass*>(arg)->main();
}

Dann, wenn Sie den Thread starten:

MyThreadClass *th = new MyThreadClass();
pthread_create(..., ..., &thread_starter, (void*)th);

Auf der anderen Seite, wenn Sie wirklich nicht pThreads müssen manuell verwenden, könnte es eine gute Idee, einen Blick haben unter Boost.Thread , eine gute C ++ Thread-Bibliothek. Dort finden Sie Klassen für Fäden, Schlösser, mutexes bekommen und so weiter und können in einer viel objektorientierten Art und Weise Multi-Threading tun.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top