2011-04-13 38 views
0

所以我意識到我的解釋不太清楚上次,所以我會再試一次。幫助QT編程與QThread類,如何使用它

我有一個程序,有一個傳感器類,每隔40毫秒左右從樂高NXT傳感器獲取數值。我還有另外一個繪圖班(我相信在同一個線程中運行),在虛擬世界中使用opengl每1毫秒繪製並移動汽車。現在的問題是每當我的傳感器獲得信息時,汽車非常緩慢並且移動緩慢,但是當傳感器關閉並且沒有獲取和輸入數據時,汽車平穩運行。我如何解決這個問題,我相信我需要創建另一個線程,但我不知道該怎麼做?

注意:傳感器與汽車無關。

+2

退房 - http://stackoverflow.com/questions/4093159/what-is-the-correct-way-to-implement-a-qthread-example-please這顯示如何創建線程並鏈接到正確的文檔 – g19fanatic 2011-04-13 18:21:00

+0

此問題太寬泛。就好像您要求QThread文檔以及有關線程是什麼以及何時以及如何使用它們的概述。 – 2011-04-13 18:47:59

回答

2

要給出線程的通用答案並不那麼容易。 Qt爲您提供了各種類來實現線程,所以最好查看示例。一般來說,你不需要使用Qt線程,除非你有一個阻止API,我猜你的傳感器模塊/類是。

這是一個nice video顯示如何創建一個在另一個線程上運行的對象。您可以嘗試在演示中實現LenghtyOperation,作爲從您的傳感器讀取數據的類,然後發出信號更新您的GUI線程。

這裏是另一個鏈接:Threading without the headache

+0

該視頻相當不錯(並且相對較新),並演示瞭如何正確使用QThread和QObject的子類(而不是QThread子類)。它似乎也覆蓋了其他多線程選項。您的第一個網頁鏈接(儘管已過時)暗示了QThread的正確方法。儘管第二和第三個鏈接是針對當前文檔的,但該文檔仍然不正確,並建議子類化QThread。 – 2011-04-13 19:40:42

+0

呃呃,最後兩個鏈接是爲了完整...正在考慮標記他們是「舊的方式」,但不知道這將是正確的方式去...所以我編輯和刪除他們 - 謝謝。 – 2011-04-13 19:49:53

+0

用於包含視頻。我一直在玩QThreads幾個月,但通過視頻的一半,我瞭解到,我正在使用它們比使用它們更困難。 – jwernerny 2011-04-14 13:12:04