Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C: SDL ja monisäikeistys

Alepale [12.02.2009 23:12:35]

#

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.

fidori [13.02.2009 02:10:41]

#

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.

Pekka Karjalainen [13.02.2009 09:07:02]

#

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 :)

Metabolix [13.02.2009 12:12:17]

#

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));

Alepale [13.02.2009 16:19:23]

#

Tämä valaisi asiaa mukavasti, kiitoksia.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta