Qt非阻塞延時

Qt非阻塞延時

I wrote asuper simple delay function for an application I developed in Qt.

I wouldadvice u to use this code against sleep function as it won't let ur GUI tofreeze.

voiddelay(int seconds)

{

    QTime dieTime=QTime::currentTime().addSecs(seconds);

    while( QTime::currentTime() < dieTime )

   QCoreApplication::processEvents(QEventLoop::AllEvents, 100);   

} 

QApplication::processEvents()


Qt應用程序中,存在一個事件循環,對應着一個事件隊列。對於單線程程序來說,只有一個事件隊列。一個新事件首先添加到隊列中,然後等待被處理。如果某個事件處理的時間有點長,就會影響其他事件的處理時間。此時,應用程序就會對其他事件無響應。爲了解決此問題,一個比較簡單的方法就是不停地調用QApplication::processEvents()函數。該函數告訴Qt去處理任何末決的事件,然後將控制權返還給調用者。事件上,Qapplication::exec()的簡化模型就是在一個while循環中不斷調用processEvents()函數。

在處理需要長時間的操作時,爲了保持界面的響應,有幾種方法可以解決。

1.使用多線程,分別用於處理不同的響應。

2.在複雜操作的過程中頻繁調用QApplication::processEvents()。這個函數告訴Qt處理所有那些還沒有被處理的各類事件,然後將控制權返還給調用者。實際上QApplication::exec()就是一個不停調用processEvents()

 http://stackoverflow.com/questions/3752742/how-do-i-create-a-pause-wait-function-using-qt


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章