SDL2: Είναι SDL_GetMouseState () νήμα-ασφαλή;

ψήφοι
34

Είναι SDL_GetMouseStateτο νήμα της λειτουργίας ασφαλές;

Και στο παράδειγμα του SDL_GetMouseState, η SDL_PumpEvents, η οποία είναι γνωστό ότι είναι το νήμα-ασφαλή, χρησιμοποιείται. Αν SDL_GetMouseStateείναι νήμα-ασφαλή, έχω να χρησιμοποιήσει SDL_PumpEventsτο οποίο είναι το νήμα-ανασφαλείς με το να γίνει σωστά εργασίας;

Δημοσιεύθηκε 25/01/2016 στις 20:20
χρήστη
Σε άλλες γλώσσες...                            


1 απαντήσεις

ψήφοι
1

Ο κώδικας αυτής της λειτουργίας είναι:

Uint32
SDL_GetMouseState(int *x, int *y)
{
    SDL_Mouse *mouse = SDL_GetMouse();

    if (x) {
        *x = mouse->x;
    }
    if (y) {
        *y = mouse->y;
    }
    return mouse->buttonstate;
}

Και SDL_GetMouseακριβώς επιστρέφει τη διεύθυνση του στατικού καθολική μεταβλητή. Ως εκ τούτου, δεν υπάρχει τίποτα μη ασφαλή με αυτό, αλλά δεν υπάρχει ατομικότητα.

Ωστόσο, τα γεγονότα επεξεργάζονται ξεχωριστά. Αν δεν η Διαδικασία γεγονότα, η δομή του ποντικιού δεν θα ενημερώσει και SDL_GetMouseStateθα σας δώσει ξεπερασμένη τιμές. Τεκμηρίωση δηλώνει ρητά θα πρέπει να καλέσετε SDL_PumpEventsμόνο στο νήμα γραφικών (αυτό που σε εκκίνηση του συστήματος γραφικών).

Χειρότερη περίπτωση αυτή θα διαβάζει κοιλάδες από SDL_GetMouseStateενώ άλλο νήμα ενημερώσεις. Θα μπορούσατε να διαβάσετε παλιά τιμή, νέα τιμή, ή ακόμα και ένα μείγμα από δύο (π.χ. x από νέους αλλά και y από το παλιό).

Απαντήθηκε 26/01/2016 στις 02:18
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more