Miten monisäikeistyksen saa toimimaan SDL:ssä? SDL:n ohjeissa lukee:
SDL_Thread *SDL_CreateThread(int (*fn)(void *), void *data);
Tuohon pitäisi varmaan laittaa jotain arvoja, mutta mitä? SDL:n ohjemateriaali ei sitä kerro.
SDL:n sivuilta löytyvästä Unix man pages -paketista löytyy:
man SDL_CreateThread kirjoitti:
SDL_CreateThread creates a new thread of execution that shares all of its parent's global memory, signal handlers, file descriptors, etc, and runs the function fn passed the void pointer data. The thread quits when this function returns.
Lazy Foon tutoriaali auttaa alkuun.
http://lazyfoo.net/SDL_tutorials/index.php
Kohdat 33-35 käsittelevät aihetta.
EDIT: Aiheesta lisää myös tässä kirjassa. Ilmainen PDF-versio löytyy.
http://greenteapress.com/semaphores/
Rinnakkaisohjelmointi voi olla hieman vaikeampaa kuin tavallinen, ja siihen tulee suhtautua kunnioituksella :)
Arvot voi päätellä varsin ilmiselvästi parametrien tyypeistä: osoitin funktioon, joka ottaa parametrinaan osoittimen (int f(void*)), ja muu osoitin. Loogisesti jälkimmäinen osoitin tällöin annetaan parametrina tuolle omalle funktiolle.
typedef int saiefunktio(void *data); int saie(void) { // ... return 0; } int saie_tulosta(const char *s) { puts(s); return 0; } int saie_omalla_datalla(struct data *d) { /* ... */ return 0; } /* ... */ SDL_CreateThread((saiefunktio*) saie, 0); SDL_CreateThread((saiefunktio*) saie_tulosta, "Tulostetaan säikeessä!"); SDL_CreateThread((saiefunktio*) saie_omalla_datalla, calloc(sizeof(struct data), 1));
Tämä valaisi asiaa mukavasti, kiitoksia.
Aihe on jo aika vanha, joten et voi enää vastata siihen.