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_SemWait

SPIS TREŚCI

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

SDL_SemWait

Użyj tej funkcji, aby zaczekać na przyjęcie dodatniej wartości przez semafor, po czym zmniejszyć go o 1.

Składnia

int SDL_SemWait(SDL_sem* sem)

Parametry funkcji

sem semafor, dla którego wykonywane jest oczekiwanie.

Wartość zwracana

Zwraca 0 przy sukcesie lub ujemny kod błędu przy niepowodzeniu; wywołaj funkcję SDL_GetError(), aby otrzymać więcej informacji na temat błędu.

Przykładowy kod

SDL_atomic_t done;
SDL_sem *sem;

SDL_AtomicSet(&done, 0);
sem = SDL_CreateSemaphore(0);
.
.
Thread A:
    while (!SDL_AtomicGet(&done))
    {
        add_data_to_queue();
        SDL_SemPost(sem);
    }

Thread B:
    while (!SDL_AtomicGet(&done))
    {
        SDL_SemWait(sem);
        if (data_available())
        {
            get_data_from_queue();
        }
    }
.
.
SDL_AtomicSet(&done, 1);
SDL_SemPost(sem);
wait_for_threads();
SDL_DestroySemaphore(sem);

Uwagi

Funkcja ta zawiesza działanie wywołującego ją wątku aż albo semafor wskazywany przez sem będzie posiadał dodatnią wartość, albo wywołanie zostanie przerwane przez sygnał lub błąd. Jeśli wywołanie się powiedzie, wartość semafora zostanie atomowo zmniejszona o 1.

Funkcja jest ekwiwalentem wywołania SDL_SemWaitTimeout() z czasem oczekiwania równym SDL_MUTEX_MAXWAIT.

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.