Serwis Edukacyjny
Nauczycieli
w I-LO w Tarnowie

Do strony głównej I LO w Tarnowie

Materiały dla uczniów liceum

  Wyjście       Spis treści       Wstecz       Dalej  

©2021 mgr Jerzy Wałaszek
I LO w Tarnowie

logo

Autor artykułu: mgr Jerzy Wałaszek

 

SDL2

Interfejs SDL2:

SDL_CreateThread

Rozdziały:
     Interfejs SDL2 wg nazw
     Interfejs SDL2 wg kategorii

 

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

SDL_CreateThread

Użyj tej funkcji, aby utworzyć nowy wątek.

Składnia

SDL_Thread* SDL_CreateThread(SDL_ThreadFunction fn,
                             const char*        name,
                             void*              data)

Parametry funkcji

fn funkcja do wywołania w nowym wątku; zobacz do Uwag.
name nazwa wątku; zobacz do Uwag.
data wskaźnik przekazywany do fn

Wartość zwracana

Zwraca mętny wskaźnik do nowego wątku przy sukcesie lub NULL, jeśli watek nie mógł być utworzony; wywołaj funkcję SDL_GetError(), aby otrzymać więcej informacji na temat błędu.

Przykładowy kod

#include <stdio.h>
#include "SDL.h"

/* Bardzo prosty wątek - zlicza od 0 do 9 co 50 ms */
static int TestThread(void *ptr)
{
    int cnt;

    for (cnt = 0; cnt < 10; ++cnt)
    {
        printf("\nThread counter: %d", cnt);
        SDL_Delay(50);
    }

    return cnt;
}

int main(int argc, char *argv[])
{
    SDL_Thread *thread;
    int         threadReturnValue;

    printf("\nSimple SDL_CreateThread test:");

    /* Po prostu utwórz wątek */
    thread = SDL_CreateThread(TestThread, "TestThread", (void *)NULL);

    if (NULL == thread)
    {
        printf("\nSDL_CreateThread failed: %s\n", SDL_GetError());
    }
    else
    {
        SDL_WaitThread(thread, &threadReturnValue);
        printf("\nThread returned value: %d", threadReturnValue);
    }

    return 0;
}

 

Wyjście:

Simple SDL_CreateThread test:
Thread counter: 0
Thread counter: 1
Thread counter: 2
Thread counter: 3
Thread counter: 4
Thread counter: 5
Thread counter: 6
Thread counter: 7
Thread counter: 8
Thread counter: 9
Thread returned value: 10

Uwagi

SDL_CreateThread() tworzy nowy wątek wykonawczy, który współdzieli całą pamięć globalną wątku głównego, sterowniki sygnałów, deskryptory plików, itp. i uruchamia funkcję fn przekazując do niej wskaźnik void* data. Wątek kończy się, gdy następuje powrót z funkcji fn.

Prototyp funkcji fn wygląda następująco:

int SDL_ThreadFunction(void* data);

gdzie:

data to, co było przekazane jako data do SDL_CreateThread().

Nie ma ograniczeń co do konwencji nazewnictwa wątków, pod warunkiem, że dostarczony łańcuch name kończy się znakiem o kodzie 0 i jest w UTF-8, lecz podane w linku wskazówki mogą być pomocne (język angielski):

Jeśli system wymusza ograniczenia, SDL będzie się starało dopasować do nich łańcuch tekstowy (np. zmniejszyć jego długość), lecz oryginalna zawartość będzie dostępna z SDL_GetThreadName().

Powiązane funkcje

 

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.