0
我正在處理SDL2的渲染庫,當我嘗試對渲染器執行任何操作時,我正遇到seg故障。經過調試我已經確定,它從窗口(現...)正確創建但是我想不通爲什麼SDL2是賽格斷層,當我打電話SDL_RenderClear(data->renderer)
SDL2 Threading Seg Fault
主線程調用:
int RenderThread::start(std::string title, int x, int y, int w, int h, Uint32 flags) {
data.window = SDL_CreateWindow(title.c_str(), x, y, w, h, flags);
if(data.window == NULL) return -2;
data.renderer = SDL_CreateRenderer(data.window, -1, 0);
if(data.renderer == NULL) return -3;
data.rlist->setRenderer(data.renderer);
data.run = true;
if(thread == NULL)
thread = SDL_CreateThread(renderThread, "RenderThread", (void*)(&data));
else return 1;
return 0;
}
然後實際的線程是:
int RenderThread::renderThread(void* d) {
RenderData* data = (RenderData*)d;
data->rlist->render(true);
SDL_SetRenderDrawColor(data->renderer, 0xFF, 0xFF, 0xFF, 0xFF);
SDL_RenderClear(data->renderer);
while(data->run) {
data->rlist->render();
SDL_RenderPresent(data->renderer);
SDL_Delay(data->interval);
}
return 0;
}
如果你需要看到更多的是對所有的github代碼。
謝謝,將SDL調用移動到線程工作。雖然我會爭辯說,一個單獨的線程是有利的,所以在處理遊戲邏輯時仍然可以渲染。唯一不可能的事情就是無法做到。而且,通過C++包裝,可以爲多個線程訪問的變量提供足夠的保護。 – Eadword