當前位置:首頁 » 操作系統 » linuxqt線程

linuxqt線程

發布時間: 2022-03-15 00:43:08

A. qt 在非qthread的線程里發送信號會有問題嗎

理論上是可以的,Qt兼容C++的 但是pthread是需要linux平台支持,windows或者其他環境需要配置一下

B. 關於QT中不用QThread寫多線程,可以用pthread嗎

理論上是可以的,Qt兼容C++的
但是pthread是需要linux平台支持,windows或者其他環境需要配置一下

C. QT創建線程,run()怎麼區分數組創建的線程

創建一個基於QObject的類 然後聲明成基於QThread的類,重載run();函數

#include <QObject>
#include <QThread>

class xx : public QThread
{public:
virtual void run();

D. 如何對Qt中多線程系列進行限制和控制

淺析 Qt中多線程系列之線程初體驗上篇 寫了個線程的創建到運行的過程,可這還沒完,線程創建完了之後必須要對其進行限制和控制,我們就是線程的監護人,不能說任由它自由,得對它進行合理約束。接下來我們講線程的控制部分,
1、線程休眠
想像一下一種情形,日常用的電腦,如果我們需要離開一段時間,那麼可能會將它暫時休眠一下,為了節約用電,也響應一下環境保護,別忘了現在都講低炭生活。那麼線程其實也一樣,如果一個線程暫時不需要用到,我們可以先讓它睡會,其目的也是為了讓它暫時不要佔用資源,主要是一個cpu時間片的佔用問題。

對於線程的休眠,只要簡單調用 Qthread 的sleep ,msleep或者usleep 方法就可以了,注意這三個方法都是Static Protected的,這意味著你只能在繼承類里做這個動作,它們差別僅是時間單位不同而已。
程序方面我們盡量簡單點,能看清本質就可以了,在Qthread 派生類的Run方法裡面用下
1. void CThread::run()
2. {
3. for(int i=1;i<=10000;i++)
4. {
5. qDebug()<<i;
6. sleep(1); //請不要那麼快,睡一下再往下執行
7. }
8. }

2、線程喚醒
既然有線程的休眠,那就有喚醒。如果你已經和線程說 Sleep 10秒吧,突然人家睡到一半的時候,你又改變主意想讓它醒過來,這里我要抱歉的說聲是沒辦法的,它就像豬一樣,沒到時間是不會醒的。比較合適的方案就是線程同步能夠解決這樣的問題,這個放到下一篇 線程的同步[1/2] 的時候再說.只要記住sleep是強制休眠就可以,但現在沒辦法提供強制喚醒的辦法.
3、線程關閉
如果一個線程運行完了它會自己結束自己的生命。可很多情況不是這么簡單,一個線程跑到中間的時候由於某種特殊原因,就想它中止。
(1)線程中止方式
中止有兩種方式 強制中止和 優雅中止,這用詞可能有點不恰當,先這么說著。在說明這兩種方式之前,有必要詳細說一下線程關閉的時候它到底幹了什麼。
線程關閉的時候,OS會移除這個線程,這部分對我們是透明的,詳細的說明還得參閱操作系統的有關書籍,接著線程中分配的堆棧信息將一並清除,但是如果是堆上分配的信息,得由你負責自己清除,因為堆是由進程持有的,它的生命周期和線程沒關系。
(2)強制中止:
簡單的調用Qthread 的方法terminate就可以進行強制中止,可這將會帶來很多災難性的後果。最為嚴重的就是一個堆內存泄露的問題,線程強制被中止,根本沒法來得及做清理工作,即使你的線程中有執行到最後清理堆內存,可它沒來得及執行
比如以下一段代碼
1. void CThread::run()
2. {
3. int *c = new int;
4. for(int i=1;i<=10000;i++)
5. {
6. qDebug()<<i;
7. }
8. //clean
9. delete c;
10. }

想像一下線程還沒執行 到 delete c;的時候你就發出了terminate,不幸的事就發生了,由此得出結論我們應該盡最大限度避免去使用。

(3)優雅的中止:

那麼怎麼優雅的關閉線程呢?我們應該通知線程,讓線程自己去接手關閉,各自關注自己所需的事,就都能做得更好,一手抓就會帶來很多問題

那麼怎麼通知線程呢? 一般會採用以下的步驟
1.在Qthread中派生類 定義一個公用方法出來 供中止時調用,比如stop()
2.調用者 直接 調用stop方法
3.派生類stop方法 ,設置 中止標志,一般就是bool成員
4.run方法 運行的時候,檢查bool成員,判斷是否需要退出進程,最後做清理工作
1. //CThread.h
2. #ifndef CTHREAD_H
3. #define CTHREAD_H
4. #include <QThread>
5. class CThread : public QThread
6. {
7. public:
8. CThread();
9. ~CThread();
10. void stop();
11. protected:
12. void run();
13. private:
14. bool mStop;
15. };
16. #endif // CTHREAD_H
17.
18. //CThread.cpp
19. #include <QDebug>
20. #include "CThread.h"
21. CThread::CThread():QThread(),mStop(false)
22. {
23. }
24. CThread::~CThread()
25. {
26. stop();
27. }
28. void CThread::run()
29. {
30. int *c = new int;
31. for(int i=1;i<=10000;i++)
32. {
33. if (mStop) // determine to exit the loop
34. {
35. break;
36. }
37. qDebug()<<i;
38. sleep(1);
39. }
40. //clean up
41. delete c;
42. }
43. void CThread::stop()
44. {
45. mStop = true;
46. wait();
47. }

E. Linux下Qt+OpenCV多線程顯示多個視頻,該如何實現,大神呀,求大神

這個你先弄個線程隊列,每個線程負責讀取一個視頻的數據,用來給一個視頻現實。因為只是讀取視頻,所以不存在同步和互斥的問題,應該很簡單啊,不知道你的問題是啥

F. qt環境怎麼用c語言寫多線程

沒必要用C語言,直接用Qthread.如果用C語言寫的話就用不到QT的platform dependence了。就不用QT就可以了。

如果必須要用的話linux 和 unix 直接調用pthread 就行。

G. qt中通過重寫run方法創建線程與通過movetothread方法有什麼區別

在Qt中使用多線程,目前就我使用過的有兩種,一是子類化QThread,重寫run函數,在run函數里實現自己的代碼,這一部分代碼通常是比較耗時,或者乾脆直接阻塞的。比如一個while循環,設置一個標志,判斷循環結束。
這樣的例子在網上有很多,就不寫了。

這樣寫的話,會有一些東西需要了解。
子類化QThread的方法,只有run函數裡面的內容是執行在子線程里的,其他的部分,比如槽函數什麼的還是在主線程里執行(假設是在主線程開啟的該子線程)。

還有一種方法,是子類化QObject,新建一個線程,然後使用MoveToThread把這個類的對象移到新建的線程中,這種做法使得它所有的槽函數都是執行在新開辟的線程裡面。

如果直接(QObject對象).abc()的話,這個成員函數是在主進程內執行,可能會出現"QObject::killTimer: timers
cannot be stopped from another thread"的運行錯誤。

使用第二種方法的話,貌似會遇到這樣的問題:如果在一個槽函數中把子線程阻塞,其他的槽函數無法接受來自主線程
額信號。

H. QT的多線程類,如何進行現成分離

QThread當你調用start的話就直接是detached狀態了
如果你調用wait就類似joinable狀態

有問題HI…

I. 各位QT大俠: QT多線程編程的時候,怎麼把次線程處理好的數據實時的顯示到ui上去

Qt上要求界面處理一般需要在主線程中完成。
所以最好把次線程中的數據緩沖區放到主線程中:
1、一種方式可以進行數據拷貝,但肯定效率低了。
2、另一種方式是直接將數據緩沖區放到主線程中,然後在主線程中處理讀取數據槽。但這樣可能主線程壓力大,機器配置不能太低。
3、直接在主線程中訪問次線程的數據並刷新界面,不過這處理起來復雜(需要手工同步),容易出錯。
4、將TableWidget指針傳入次線程中,直接在次線程中對其進行操作並發送刷新信號。這種方式未經驗證,感覺可能性不大:一方面指針容易走空,另一方面就是前面說的限制在主線程中對接面進行處理。不過所說的「處理」可能並不包括刷新數據吧。
期待樓主進行驗證,並展示結果。(或者樓主可以將UDP試驗項目發送給我,讓我試試,QQ:956693152,謝謝!)

熱點內容
java讀取properties文件 發布:2024-09-25 13:10:21 瀏覽:837
sql2005比sql2000 發布:2024-09-25 12:43:00 瀏覽:720
c語言後綴表達式求值 發布:2024-09-25 12:32:10 瀏覽:260
為什麼只有安卓的多任務是重疊的 發布:2024-09-25 12:32:03 瀏覽:510
資料庫前沿 發布:2024-09-25 12:30:30 瀏覽:977
演算法學習書籍 發布:2024-09-25 11:53:35 瀏覽:687
安卓系統在哪裡有格式化 發布:2024-09-25 11:14:27 瀏覽:891
javastruct 發布:2024-09-25 11:07:04 瀏覽:380
c語言幾幾開 發布:2024-09-25 10:46:07 瀏覽:630
技能樹演算法 發布:2024-09-25 10:45:12 瀏覽:169