c-这个SDL_gfx代码是否涉及竞争条件



当我在机器上运行以下代码时,它的行为并不是决定性的。它应该画的三角形只是偶尔出现:

#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时也观察到了这一点。

这里的某个库中是否存在种族问题,或者我的电脑有问题?

这涉及到很多事情,尤其是如果您有合成窗口管理器。就像你们翻转得到的图像,但那个时并没有看到窗口。对于合成,情况更糟,因为它实现了自己的双缓冲。

就像每一个例子一样,反复画一个循环。如果必须这样做,您只能在窗口事件(大部分是"公开的"事件)上重新绘制。

相关内容

  • 没有找到相关文章

最新更新