1

私はこれらのエラーを受け取っているので:

[xcb] Unknown request in queue while dequeuing
[xcb] Most likely this is a multi-threaded client and XInitThreads has not been called
[xcb] Aborting, sorry about that.
main: ../../src/xcb_io.c:178: dequeue_pending_request: Assertion `!xcb_xlib_unknown_req_in_deq' failed.

編集:私も時々このエラーを受け取ります:

XIO:  fatal IO error 11 (Resource temporarily unavailable) on X server ":0.0"
  after 48888 requests (48888 known processed) with 0 events remaining.

プログラムをマルチスレッドセーフにしようとしているので、ピクセルに直接アクセスする前にSDL_LockSurfaceを呼び出しています。

私はこれらの関数がピクセルにアクセスすることを知っています:

int SDL_BlitSurface(SDL_Surface *src, SDL_Rect *srcrect, SDL_Surface *dst, SDL_Rect *dstrect);
int SDL_FillRect(SDL_Surface *dst, SDL_Rect *dstrect, Uint32 color);

ピクセルに直接アクセスする他の機能はありますか?

4

1 に答える 1

2

SDL_LockSurfaceは、ピクセルに直接アクセスするために使用されます。マルチスレッドとは関係ありません。

SDLでは、ライブラリとビデオサブシステムを初期化したスレッドである1つのスレッドからのみライブラリ関数にアクセスできます。これはほとんどのgfxまたはUIライブラリに適用されます。

メインスレッドのピクセルのコピーを取り出して、処理のために他のスレッドに配布する必要があります。(ピクセルを処理した後で何かを再度表示する必要がある場合は、結果をメインスレッドに戻します)

于 2012-10-29T19:42:46.930 に答える