Serwis Edukacyjny
Nauczycieli
w I-LO w Tarnowie

obrazek

Materiały dla uczniów liceum

  Wyjście       Spis treści       Wstecz       Dalej  

Autor artykułu: mgr Jerzy Wałaszek

©2021 mgr Jerzy Wałaszek
I LO w Tarnowie

SDL2

Interfejs SDL2:

SDL_atomic_t

SPIS TREŚCI

Rozdział jest tłumaczeniem oryginalnej instrukcji dla biblioteki SDL2. Oryginał znajdziesz pod tym adresem: https://wiki.libsdl.org/CategoryAPI.

SDL_atomic_t

Struktura reprezentuje atomową (niepodzielną wątkowo) wartość całkowitą.

Pola danych

int value atomowa wartość całkowita

Przykładowy kod

/* To jest prosty program zliczający klatki na sekundę
 *
 * Liczniki czasu w SDL pracują w osobnym wątku,
 * zatem należy uważać, aby nie wpaść w wyścig danych
 */
SDL_atomic_t frames;

/* Oblicz i wyświetl średnią liczbę klatek w wybranym okresie */
Uint32 fps_timer_callback(Uint32 interval, void *data)
{
        const float f = SDL_AtomicGet(&frames);
        const float iv = (float)interval / 1000.0f;
        printf("%.2f\tfps\n", f / iv);

        /* Resetuj licznik klatek */
        SDL_AtomicSet(&frames, 0);

        return interval;
}

int main(int argc, char **argv)
{
        SDL_Init(SDL_INIT_EVERYTHING);
        SDL_Window *win = SDL_CreateWindow("Licznik",
                        SDL_WINDOWPOS_CENTERED,
                        SDL_WINDOWPOS_CENTERED,
                        640,
                        480,
                        0
                        );

        SDL_Surface *screen = SDL_GetWindowSurface(win);

        /* Nasz licznik będzie uruchamiany co pięć sekund w osobnym wątku */
        SDL_AddTimer(5000, fps_timer_callback, NULL);

        SDL_Event e;
        while(1)
        {
                while (SDL_PollEvent(&e))
                       if (e.type == SDL_QUIT) goto quit;
            
                SDL_FillRect(screen, NULL, 0xffffffff);
                SDL_UpdateWindowSurface(win);

                /* Dodaj klatkę */
                SDL_AtomicAdd(&frames, 1);
        }
quit:
        SDL_DestroyWindow(win);
        SDL_Quit();
        return 0;
}

Uwagi

Typ SDL_atomic_t jest strukturą po to, aby przez przypadek nie wykonywać na nim zwykłych operacji arytmetycznych. Zamiast nich powinieneś korzystać z funkcji operacji atomowych (operacja niepodzielna wątkowo, stosowana w środowisku wielowątkowym po to, aby różne wątki nie zmieniały w sposób niekontrolowany danych, gdy dane te są używane przez inny wątek).

Powiązane funkcje

Na początek:  podrozdziału   strony 

Zespół Przedmiotowy
Chemii-Fizyki-Informatyki

w I Liceum Ogólnokształcącym
im. Kazimierza Brodzińskiego
w Tarnowie
ul. Piłsudskiego 4
©2021 mgr Jerzy Wałaszek

Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone
pod warunkiem podania źródła oraz niepobierania za to pieniędzy.

Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl

Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.

Informacje dodatkowe.