1. 程式人生 > >Qt之執行緒的暫停與重新啟動

Qt之執行緒的暫停與重新啟動

參考:http://www.360doc.com/content/15/0713/11/20016257_484603805.shtml

在Qt中實現繼承QThread的新執行緒的暫停與重新啟動的方法,主要採用互斥量的方法,新執行緒一般都採用while迴圈,來實現程式的不斷執行,我們只需要在while迴圈開始的時候,將互斥量鎖上,迴圈結束時,再解鎖即可。如果要實現暫停與重新啟動的功能,只需要在其它函式裡重新給互斥量進行上鎖與解鎖即可。程式碼如下

首先定義了一個GNSSREPLAY的執行緒類,具體的實現方法不做介紹,可參考相關的教程,實現Qt中繼承QThread建立新執行緒,我們要做的,只需要重寫run函式即可

void GNSSREPLAY::run()
{    
	while(!stopped)
	{
		m_lock.lock();
		/*此處新增執行程式碼**/
		m_lock.unlock();
	}
}
然後新增暫停函式
void GNSSREPLAY::GNSSPause()
{
    m_lock.lock();
}
重新啟動函式
void GNSSREPLAY::GNSSResume()
{
    m_lock.unlock();
}
記得要在新執行緒的標頭檔案中新增互斥量的定義
private:
    QMutex m_lock;
這樣,在主頁面函式中,首先例項化一個新執行緒的類,如
GNSSREPLAY gnssreplay;
然後,就可以通過呼叫gnssreplay.start()、gnssreplay.GNSSPause()、gnssreplay.GNSSResume()函式來實現執行緒的啟動、暫停與重新啟動的功能