2010-10-13 39 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