2011-09-19 33 views
1

我有一個gtktree列和值。我還有一個帶有一個gtkmenuitem的菜單:'刷新'。爲什麼我的GtkTreeView更新只會在gtkitem事件結束後觸發?

刷新事件做了兩兩件事:

  • 重新填充我的gtktree
  • 預製件的查詢。

該查詢不是即時的,大約需要5秒。爲什麼我只能在查詢5秒後才能看到樹的更新?我想立即更新gtk樹,我不明白更新的延遲。

+0

我已將您的兩個帳戶合併在一起。 [請閱讀關於基於Cookie的帳戶的這個Faq條目。](http://meta.stackexchange.com/questions/44557/why-should-i-register-my-account/1228)另外,StackOverflow不是論壇;如果您有新問題,請提出一個新問題。如果你想在你的問題中包含更多信息,請[編輯](http://stackoverflow.com/posts/7476705/edit)。如果您想與其中一位已回答的人進行互動,您可以留下評論。另外,我想你應該閱讀[faq#howtoask]和[faq#bounty]。 – Will

+0

此外,我不編碼GTK,但我敢打賭,你阻止了UI線程。您需要在不同的線程上執行查詢,以便UI線程可以更新樹。 – Will

回答

2

如果你正在做一個長時間的計算,那麼程序就忙於此,並沒有時間來更新GUI。爲了解決這個問題,請確保您在查詢的「主循環」執行以下代碼(如果有這樣的事):

while(gtk_events_pending()) 
    gtk_main_iteration(); 

如果查詢沒有一個循環,例如如果它完全在外部庫中運行,則必須按照Will的建議來做,並在單獨的線程中運行它。

+0

如果您的查詢針對sqlite運行,請將上面的代碼放入sqlite3_progress_handler()回調函數中。 – aquaherd

相關問題