此SDL_gfx代码是否涉及竞争条件?

时间:2016-05-03 01:21:45

标签: c graphics sdl race-condition non-deterministic

当我在我的机器上运行以下代码时,它并不具有确定性。它应该绘制的三角形有时只出现:

#include <SDL/SDL.h>
#include <SDL/SDL_gfxPrimitives.h>

int main(int argc, char* args[])
{
    int xres = 250;
    int yres = 250;

    SDL_Surface* screen = SDL_SetVideoMode(xres, yres,
        0, SDL_SWSURFACE | SDL_DOUBLEBUF | SDL_NOFRAME);

    SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, 0, 0, 0));
    filledTrigonRGBA(screen, 10, 10, 170, 170, 75, 100, 255, 0, 255, 255);
    //SDL_Delay(1);       // this fixes some race condition?
    SDL_Flip(screen);
    SDL_Delay(1000);
    SDL_Quit();

    return 0;
}

但如果我取消注释第一个SDL_Delay()调用,则会出现三角形。我在使用SDL 2时也观察到了这一点。

这里的某个库中是否存在竞争条件,或者我的计算机出现了问题?

1 个答案:

答案 0 :(得分:1)

涉及很多事情,特别是如果你有合成窗口管理器。就像你翻转你的结果图像,但那时候窗口不可见。使用合成它会更糟糕,因为它实现了自己的双缓冲。

只需重复绘制一个循环,就像每个例子一样。如果你绝对必须,你可以只重绘窗口事件(主要是&#39;暴露的&#39;一个)。