Squicky
Lt. Commander
- Registriert
- Sep. 2002
- Beiträge
- 1.405
Hallo
Ich möchte Multithreading in C++ Klassen nutzen.
Habe http://openbook.galileocomputing.de/c_von_a_bis_z/026_c_paralleles_rechnen_004.htm#mja2eda8d735b0159acdc76284d6c9eb57 gelesen und folgendes versucht:
Leider funktioniert dies nicht. Laut meiner Internetsuche ist pthread_create eine C Funktion und funktioniert mit C++ Klassen nicht.
Aber es muss doch eine Multithreading Möglichkeit für Klassen in C++ geben.
Wie könnte man dieses kleine Beispiel richtig umsetzen?
P.S. Hier die Ausgabe:
P.S.
Ich möchte Multithreading in C++ Klassen nutzen.
Habe http://openbook.galileocomputing.de/c_von_a_bis_z/026_c_paralleles_rechnen_004.htm#mja2eda8d735b0159acdc76284d6c9eb57 gelesen und folgendes versucht:
Code:
#include <iostream>
#include <pthread.h>
#include <stdio.h>
using namespace std;
class helper {
private:
pthread_t thread;
static void *start_help();
public:
int id;
void start();
};
static void *helper::start_help() {
cout << "start_help :-) " << id << endl;
}
void helper::start() {
thread = pthread_create(& thread, NULL, & start_help, NULL);
}
int main() {
cout << "hallo main" << endl;
helper x;
x.id = 4711;
x.start();
return 0;
}
Leider funktioniert dies nicht. Laut meiner Internetsuche ist pthread_create eine C Funktion und funktioniert mit C++ Klassen nicht.
Aber es muss doch eine Multithreading Möglichkeit für Klassen in C++ geben.
Wie könnte man dieses kleine Beispiel richtig umsetzen?
P.S. Hier die Ausgabe:
Code:
"/usr/bin/make" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS= .build-conf
make[1]: Betrete Verzeichnis '/home/user/NetBeansProjects/CppApplication_1'
"/usr/bin/make" -f nbproject/Makefile-Debug.mk dist/Debug/GNU-Linux-x86/cppapplication_1
make[2]: Betrete Verzeichnis '/home/user/NetBeansProjects/CppApplication_1'
mkdir -p build/Debug/GNU-Linux-x86
rm -f build/Debug/GNU-Linux-x86/main.o.d
g++ -pthread -c -g -I/usr/include/c++/4.6.1 -MMD -MP -MF build/Debug/GNU-Linux-x86/main.o.d -o build/Debug/GNU-Linux-x86/main.o main.cpp
main.cpp:17:32: Fehler: Elementfunktion »static void* helper::start_help()« kann nicht deklariert werden, statische Bindung zu haben [-fpermissive]
main.cpp: In statischer Elementfunktion »static void* helper::start_help()«:
main.cpp:13:9: Fehler: ungültige Verwendung des Elementes »helper::id« in statischer Elementfunktion
main.cpp:18:34: Fehler: von dieser Stelle
main.cpp: In Elementfunktion »void helper::start()«:
main.cpp:22:63: Fehler: ungültige Umwandlung von »void (*)()« in »void* (*)(void*)« [-fpermissive]
/usr/include/pthread.h:225:12: Fehler: Argument 3 von »int pthread_create(pthread_t*, const pthread_attr_t*, void* (*)(void*), void*)« wird initialisiert [-fpermissive]
make[2]: *** [build/Debug/GNU-Linux-x86/main.o] Fehler 1
make[2]: Verlasse Verzeichnis '/home/user/NetBeansProjects/CppApplication_1'
make[1]: *** [.build-conf] Fehler 2
make[1]: Verlasse Verzeichnis '/home/user/NetBeansProjects/CppApplication_1'
make: *** [.build-impl] Fehler 2
BUILD FEHLGESCHLAGEN. (Ausstiegswert 2, Zeit total: 374ms)
P.S.