mem_fun ausfällt, Pthread und Klasse ptr
-
19-08-2019 - |
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?
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.