Jaka jest poprawna sekwencja z funkcją “xcb_get_image_unchecked”?

0

Używam następującego kodu:

typedef unsigned N32;
xcb_get_image_cookie_t ret_id = xcb_get_image_unchecked( display->x_display
, XCB_IMAGE_FORMAT_Z_PIXMAP
, pixmap
, x, y, 1, 1
, ~0
);
xcb_get_image_reply_t *ret = xcb_get_image_reply( display->x_display, ret_id, 0 ); //NDFN Po pewnym czasie zwraca 0.
N32 pixel = *( N32 * )xcb_get_image_data(ret);
free(ret);

Jednak po kilku wywołaniach funkcja xcb_get_image_reply wraca z NULL. Nie wiem, dlaczego tak się dzieje. Kolejne wywołania już w nieskończoność wracają z NULL.
W związku z tym zastanawiam się, czy nie potrzeba jeszcze zwalniać jakoś “image” otrzymanego funkcją “xcb_get_image_unchecked”.
W Internecie nie znalazłem pełnej informacji na temat poprawnego użycia tej funkcji ani przykładów.

2

Według dokumentacji

xcb_get_image_reply_t *xcb_get_image_reply(xcb_connection_t *conn, xcb_get_image_cookie_t cookie, xcb_generic_error_t **e);

Przekazujesz 0 jako ostatni parametr - może dlatego nie masz informacji o błędzie ?

0

Teraz sprawdzam błąd w ten sposób:

xcb_generic_error_t *e;
xcb_get_image_reply_t *ret = xcb_get_image_reply( display->x_display, ret_id, &e );
if(e)
{   G_(); Gd( e->error_code ); // Wypisz komunikat z numerem błędu.
    V(); // Zakończ program.
}

I ten warunek nigdy nie zachodzi, nie ma sygnalizowanego błędu.

Poprawka: zmieniłem na funkcję “xcb_get_image” (bez “_unchecked”), by odczytywać błąd. Ale teraz on nie występuje. Przypuszczam, że jest to związane z szybkością ‘requestów’, ponieważ przy obecnych testach jest mniejsza.

1 użytkowników online, w tym zalogowanych: 0, gości: 1