首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SDL2断股故障

SDL2断股故障
EN

Stack Overflow用户
提问于 2015-01-03 03:49:47
回答 1查看 496关注 0票数 0

我正在为SDL2开发一个呈现库,当我尝试使用渲染器做任何事情时,我都会遇到一个seg错误。通过调试,我确定它是从窗口(现在.)正确创建的。但是,当我调用SDL2时,我不知道为什么SDL_RenderClear(data->renderer)是seg错误。

主线程调用:

代码语言:javascript
复制
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;
}

那么实际的线程是:

代码语言:javascript
复制
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上。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-03 09:35:06

有些平台(例如Windows)不允许从创建它们的线程以外的线程与窗口交互。

文档明确指出:

注意:您不应该期望能够在除主线程之外的任何线程上创建窗口、呈现或接收事件。

从设计的角度来看,试图从另一个线程呈现成为许多问题的根源。例如:

  • 每帧更新一次以上的对象(不可预测)是可取的吗?是什么阻止一个逻辑线程尝试进行许多无法呈现的更新?
  • 在没有机会更新对象的情况下冒险重新呈现是可取的吗?
  • 当更新发生时,你会锁定整个场景吗?或者每个对象都会有自己的锁,这样就不会尝试呈现处于更新过程中的对象了?由于其他线程锁定对象,是否希望帧速率不可预测?

更不用说同步原语的成本了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27751533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档