Qt中關於執行緒需要注意的地方

2021-06-03 17:29:35 字數 663 閱讀 3851

以前一直沒弄多執行緒的東西,這幾天試了以下,結果弄出很多問題出來,記錄下。

如何刪除執行緒:

為了可以動態調節執行緒的數量,我把所有的執行緒都放在乙個vector中,當需要的數量大於vector.count()的時候則建立並加入執行緒;當需要減少執行緒數的時候則通過如下**實現:

qthread* thd = vector.last();

delete thd;

vector.pop_back();

普通用法估計沒有什麼問題,但在需要動態調節數量並且這些執行緒都共用一些東西的時候就有很大的問題了。

delete thd;並沒有讓執行緒結束,如果是在windows下可以說只是將其操作的handle給刪除掉了,並沒有停止**塊在系統執行緒佇列的執行,所以其實我們的執行緒還是執行當中的,並且這樣處理了之後就真的無法停止執行緒了。

這樣做的壞處有2個:

1.訪問一些物件(例如執行緒共享)的時候提示unhandle exception;

2.呼叫emit signal之後sender()被提示unhandle exception;

所以正確的做法應該是先disconnect(),然後在terminate(),最後delete掉它。

沒有細看源**不知道qthread的析構函式在怎麼寫的,不過從這裡可以看出析構函式中並沒有停止執行緒執行的相關操作,小小的失望了下。

關於CQ Schema需要注意的地方 1

1.關於使用schema有兩種用法 第一種,每個專案建乙個schema資料庫和乙個缺陷資料庫,這個專案的缺陷庫對應這個專案的schema,與其它專案無關。所以,更改這個專案的schema不影響其它專案的schema,可以根據需要隨便更改。第二種,建乙個公共的schema資料庫,所有專案的缺陷資料庫都...

SQL中Null需要注意的地方

一 null不支援大小 相等判斷 下面的2個查詢,不管表 users 中有多少條記錄,返回的記錄都是0行 select fromuserswheredeleted at null select fromuserswheredeleted at null 用常規的比較操作符 normal condit...

Lua學習中需要注意的地方

1 全域性變數的刪除可以直接將其賦值為nil 2 字串的引用可以是單引號 或者是雙引號 習慣使用雙引號 3 lua中除了false 跟 nil 是假 其餘值都是真 0,空串都返回真 4 和 比較兩個值,如果兩個值型別不同,lua認為兩者不同 nil只和自己相等。lua通過引用比較tables use...