Christian Kruse: Mehrere Argumente an Threads in C?

Beitrag lesen

你好 Markus,

struct ball    {
SDL_Surface *background;
SDL_Surface *display;
} ballargs;

Sieht schonmal gut aus.

..und alles dem Thread übergeben...
pthread_create(&thr1, NULL, thread_ball, &ballargs);

Was passiert mit background und display nach dem pthread_create-Aufruf?

In der Funktion, die ich nun thread_ball genannt habe, nehme ich sie
entgegen:
void *thread_ball(void *arg)    {
struct ballargs *myarg = (struct ballargs *)arg;

Jupp, auch ok.

Die Frage ist aber nun, wie ich meine Werte aus der Struktur wieder
richtig herausbekomme?

über myarg->background bzw. myarg->display.

Das Programm lässt isch zwar kompilieren, aber es läuft nicht richtig.

Siehe dazu meine Frage weiter oben. Ausserdem musst du daran denken, dass
du mit myarg->background bzw. myarg->display Pointer auf SDL_Surface
bekommst. Wenn du also die Funktion ball aufrufst, darfst du sie nicht
nochmal referenzieren:

ball(myarg->background, myarg->display)

Wenn du noch einen Referenzierungs-Operator davor packen würdest
(&myarg->background z. B.), dann hättest du nicht mehr SDL_Surface *,
sondern SDL_Surface **.

Ansonsten musst du schon etwas mehr Code zeigen. Fehlersuche ist so
schwierig.

再见,
克里斯蒂安

--
Der Mund ist das Portal zum Unglück.
http://wwwtech.de/