你好 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.
再见,
克里斯蒂安