2010-10-13 120 views
1

我刚开始使用SFML库和它的梦幻般的。但是,通过用鼠标拖动角落来调整窗口大小时,我不会收到调整大小事件,直到我释放鼠标。这意味着我不能更新我的图形,直到鼠标被释放(游戏循环在gui线程上),并且还导致所有调整大小位置出现大量事件。SFML窗口调整大小事件阻塞主线程

我如何让它如此调整大小不会阻止线程?

回答

2

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

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

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

+0

你为何用2个事件队列(event_buffer_a,event_buffer_b)?为什么你使用std ::队列而不是std :: vector? – Truncheon 2011-03-31 13:17:49

+0

这被称为双缓冲。那么......我不确定是否真的有必要,但现在它已经可以工作了,而且我还有更多重要的东西需要在这个项目中进行研究,所以我现在不会搞砸它。是的,只能使用一个缓冲区来完成。我做两个的原因可能是我认为插入会阻塞,但只有GetEvent块,所以插入之后是可以的。另外,我不认为他们必须是deque,排队就足够了。 我使用队列,因为它比弹出/弹出更快,因为这是一个链表,而不是背景中的“C风格数组”。 – torokati44 2011-03-31 19:08:21