我正在與一個擴展着名的生產者 - 消費者問題與線程(作業)。我有一個共享隊列作爲「我的緩衝區」,製片人需要每秒產生一個「元素」。用QTtimer調度線程?
我正在使用(我的第一次...)QT和我想要一個計時器,以便每一秒生產者將生成元素。
我不明白QTimer庫...有人可以告訴我什麼庫/函數我必須使用定時器?只是QTimer似乎是GUI ...如果Qtimer是我必須使用的,那麼如何?
也許這是一個愚蠢的問題,但這個小東西帶我太多時間...而我沒有找到一個aswer。
我正在與一個擴展着名的生產者 - 消費者問題與線程(作業)。我有一個共享隊列作爲「我的緩衝區」,製片人需要每秒產生一個「元素」。用QTtimer調度線程?
我正在使用(我的第一次...)QT和我想要一個計時器,以便每一秒生產者將生成元素。
我不明白QTimer庫...有人可以告訴我什麼庫/函數我必須使用定時器?只是QTimer似乎是GUI ...如果Qtimer是我必須使用的,那麼如何?
也許這是一個愚蠢的問題,但這個小東西帶我太多時間...而我沒有找到一個aswer。
你只需要確保一個QEventLoop運行在每個需要工作的線程中(使用QObject的)。
您將擁有一個主事件循環(「GUI線程」),該循環運行QApplication.exec()
。
然後你創建另一個線程(做並行工作),你在那個運行的線程中有QEventLoop。你通常會確保QObject的(在這個額外的線程中工作)有這個額外的線程作爲他們的「親和線程」。如果您從額外線程內創建並設置了QObject,則新的QObject的關聯線程將成爲當前線程。
除此之外,您使用QueuedConnection在線程之間傳遞信號/插槽。
我敢肯定,如果你搜索的話,有很多QTimer代碼博客的例子。
您只需要使用Qtimer每秒發出一個信號。然後將一個插槽連接到該信號,您可以啓動一個線程,但必須跨線程管理共享資源(「我的緩衝區」)。
QTimer timer=new QTimer(); connect(timer,SIGNAL(timeout()),this,SLOT(On_Timeout));
timer->start(1000);
凡On_Timeout執行每一秒。
以下是關於Qtimer的一些基本教程。 http://www.youtube.com/watch?v=pHc7siV2Ads
如果您的製作者沒有事件循環,爲什麼不使用Sleep()循環? –