SFML渲染窗口打开时间过长问题

4
我知道这基本上是一个重复的问题,但this从未得到答案。我想提一下,我已经按照教程使用SFML和Visual Studio,并且正在运行一个64位项目和64位SFML。窗口在几次加载时立即打开,现在每次新建/调试都需要40秒才能打开。我也关闭了调试符号的下载。我的图形驱动程序已经更新,我的硬盘也没问题。这是代码:
 #include <SFML/Graphics.hpp>

int main()
{
sf::RenderWindow window(sf::VideoMode(200, 200), "SFML works!");//This one
sf::CircleShape shape(100.f);
shape.setFillColor(sf::Color::Green);

while (window.isOpen())
{
    sf::Event event;
    while (window.pollEvent(event))
    {
        if (event.type == sf::Event::Closed)
            window.close();
    }

    window.clear();
    window.draw(shape);
    window.display();
}

return 0;
}

除了RenderWindow之外,一切都以正常速度运行,而RenderWindow每次都需要40秒钟。有人知道我该如何解决这个问题吗?我已经遇到这个问题几周了。
可能是我的CPU的问题吗?虽然我的CPU不是最好的,但我仍然可以运行大多数游戏,因为我有一个1050ti。我的当前CPU是i5-2500k,尽管我认为我在A10-5800k上也遇到了同样的问题。

这绝对不正常。你尝试过在 Visual Studio 之外运行二进制文件吗?另外,也许可以尝试从头开始重新构建二进制文件。 - Chachmu
昨天还好好的,什么都没改,现在又坏了。我猜我得再试着把所有东西都清理一遍。 - Chloear2017
是啊,还是无法正常工作吗?重新安装Windows会有什么作用吗?我已经重新安装了Visual Studio两次了。 - Chloear2017
@Chachmu 在不使用Visual Studio的情况下运行二进制文件并没有改变任何东西,而且程序在今天早些时候能够运行,现在却不能了。有没有可能我的电脑运行了一个小时或更长时间后就无法正常工作?如果我无法找到解决方法,我要么放弃,要么重新安装Windows系统。 - Chloear2017
我想这可能与我的Windows有关,因为Visual Studio和SFML的全新安装都导致了相同的结果。我猜我可以放弃SFML并尝试另一个多媒体库,但我喜欢SFML的文档和结构。我也不想直接使用OpenGL,因为我正在尝试制作一个相当简单的程序作为学习经验,而图形并不是主要重点。感谢迄今为止所有的建议,如果我发现任何东西,我会更新的。 - Chloear2017
显示剩余2条评论
3个回答

3

编辑:在您尝试以下解决方案之前,请尝试更新键盘固件!您很可能使用的是Corsair键盘,因此请下载Corsair的iCue并更新键盘驱动程序。这很可能会解决这些问题。如果没有起作用,则尝试以下操作:

由于OP没有回复更多信息,我试图自己找到解决方法,因为这个问题在2020年仍然存在。这个解决方法要求您自己编译库。因此,请下载源代码并进行以下更改:

  • WindowImpl.cpp中,转到函数WindowImp::WindowImp并注释掉整个函数体。
  • WindowImpl.cpp中,转到WindowImp::popEvent并注释掉对processJoystickEvents的调用。

只要您不使用SFML的手柄部分,这应该可以正常工作,而无需其他问题。


我也将此转发给SFML开发团队,希望他们能找到一个更少hacky的解决方案。 - Lauchmelder
最终在使用RUST实现SFML时遇到了这个问题。突然之间,RenderWindow要花费5秒至10秒的时间才能启动。奇怪的是,只需要重新启动就可以解决我的问题。值得注意的是,我确实已经为我的K95安装了iCUE。 - General Sirhc

2

SFML的一个成员在discord上帮助我解决了问题,通过向我展示如何查看调用堆栈,我们找到了问题所在。原来在轮询dx输入时会出现卡顿,经过一些实验后我们发现我的k55键盘有问题。我今晚会尝试找到解决方案,但在短期内,拔掉键盘可以使所有东西正常工作。


1

我有同样的键盘(Corsair K55)。对我来说,问题在于 Corsair 的 iCue 软件,完全退出该软件即可解决问题,而无需拔出键盘。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接