我正在寫一個應用程序,停留在托盤欄中,並且每隔幾分鐘進行一次檢查。 當它執行此檢查時,我想讓托盤欄圖標變成動畫。 這就是爲什麼我有第一個wxTimer
觸發檢查。在我的OnTimer
調用中,我試圖管理第二個wxTimer
來處理動畫。wxWidgets:是否可以嵌套兩個不同的wxTimers?
問題是定時器在主循環中工作,所以當第二個定時器更新圖標索引時,圖標不會更新。
有沒有辦法解決這個問題?
謝謝!
我正在寫一個應用程序,停留在托盤欄中,並且每隔幾分鐘進行一次檢查。 當它執行此檢查時,我想讓托盤欄圖標變成動畫。 這就是爲什麼我有第一個wxTimer
觸發檢查。在我的OnTimer
調用中,我試圖管理第二個wxTimer
來處理動畫。wxWidgets:是否可以嵌套兩個不同的wxTimers?
問題是定時器在主循環中工作,所以當第二個定時器更新圖標索引時,圖標不會更新。
有沒有辦法解決這個問題?
謝謝!
您對問題的描述不幸根本不明確,但如果您的意思是在重新進入事件循環之前您沒有獲得計時器事件,那麼確實是這樣,而且,幾乎是同義反復的 - 您需要返回到事件循環來獲取任何事件。
這就是爲什麼您的事件處理程序應該總是快速執行並將控制權返回給主循環的原因。如果它們花費太長時間,通常的解決方案是使用後臺線程作爲實際工作,並將其安排在您的事件處理程序中,但不要等到完成。
基礎上Ryan G的評論
有可能納入到wx.Yield()
主循環。這通常用於臨時釋放全局鎖定以允許更新小部件。 也可以創建一個單獨的線程來獨立於主線程更新動畫。
使用wx.Yield()
應該更容易實現。
您是否嘗試將wx.Yield()合併到主循環中?這通常用於臨時釋放全局鎖定以允許更新小部件。你也可以嘗試創建一個單獨的線程來獨立於主線程更新動畫。我曾經制作過一個動畫進度條,並且遇到了同樣的問題,我相信我使用線程解決了這個問題,但嘗試使用wx.Yield(),因爲它應該更容易實現。 –