pthread_create() Parameter
-
Hallo,
ich übergebe pthread_create() als Parameter ein Objekt:
Connection* cx = new Connection(); ... cout << cx->get_server(); // liefert zum Beispiel 3 ... pthread_create(&thread_ids[i], NULL, accept_handler, &cx)Wenn ich in der Funktion accept_handler() dann auf die Werte des Objektes zugreifen möchte, dann bekomme ich falsche Werte:
void* accept_handler(void* context) { Connection* cx = static_cast<Connection*> (context); cout << cx->get_server(); // liefert zum Beispiel 26226704 }Wie komme ich jetzt wieder an die richtigen Daten? Wahrscheinlich bekomme ich nur den Adressbereich geliefert.
Noch zur Ergänzung:
int Connection::get_server() { return this->s; }
-
moepmoep schrieb:
Connection* cx = new Connection(); ... cout << cx->get_server(); // liefert zum Beispiel 3 ... pthread_create(&thread_ids[i], NULL, accept_handler, &cx)Du übergibst ja auch die Adresse vom Zeiger (Also einen Zeiger auf deinen Zeiger). Es müsste da eher
pthread_create(&thread_ids[i], NULL, accept_handler, cx);heißen.
-
Wenn du schon "nackte" Threads verwenden musst, solltest du C++11-Threads verwenden. Wenn dein Compiler dies noch nicht unterstützt, verwende boost. Selber das Rad neu zu erfinden und ein C++ Wrapper um das pthreads C API zu schreiben ist sinnlos verplemperte Zeit.
-
ich danke euch beiden. Es funktioniert jetzt und die Daten werden richtig übergeben. Ich werde mir dann mal die C++11 Thread angucken.

-
Wenn ich mir die Namen in deinem Code ansehe, sieht das nach sockets aus. Dann solltest du dir boost asio ansehen, das macht vermutlich genau das, was du da implementieren willst.