【问题标题】:SFML window resizing events blocking the main threadSFML 窗口大小调整事件阻塞主线程
【发布时间】:2011-04-24 18:48:12
【问题描述】:

我刚开始使用 SFML 库,它很棒。但是,当通过用鼠标拖动角落来调整窗口大小时,直到我释放鼠标,我才会收到调整大小事件。这意味着在释放鼠标之前我无法更新我的图形(游戏循环在 gui 线程上),并且还会导致所有调整大小位置的大量事件发生。

我怎样才能使它在调整大小时不会阻塞线程?

【问题讨论】:

    标签: windows opengl resize sfml


    【解决方案1】:

    Windows 会导致这种情况。如果您移动或调整窗口大小,GetEvent() 将变为阻塞。 (讨厌这个操作系统的另一个有趣的小理由......)

    我已经用一个单独的事件轮询线程解决了这个问题。看看这个: (对您来说有趣的部分完全在 main.cpp 中。)

    https://bitbucket.org/torokati44/netframework/src/93bdf20d0f65/main.cpp

    【讨论】:

    • 为什么要使用2个事件队列(event_buffer_a,event_buffer_b)?为什么你使用 std::queue 而不是 std::vector?
    • 这称为双缓冲。嗯......我不确定它是否真的有必要,但它现在有效,而且我在这个项目中有更重要的事情要完善,所以我现在不搞砸它。是的,只需一个缓冲区即可完成。我做两个的原因可能是我认为插入会阻塞,但只有 GetEvent 阻塞,所以之后的插入是可以的。另外,我认为它们不必是双端队列,队列就足够了。我使用队列是因为它的弹出/推送比向量更快,因为这是一个链表,而不是后台的“C 样式数组”。
    猜你喜欢
    • 2017-12-24
    • 1970-01-01
    • 2014-04-06
    • 1970-01-01
    • 1970-01-01
    • 2013-07-26
    • 2017-01-20
    • 1970-01-01
    相关资源
    最近更新 更多