Qt開發 釋放執行緒中建立的QUdpSocket物件

2021-06-21 23:40:24 字數 1208 閱讀 8420

在做symbian應用開發和meego應用開發時q框架是乙個統一的開發框架,很多時候需要在qthread的run中new乙個qudpsocket來收發資料.這時,這個socket物件的釋放就成了乙個麻煩的問題.

51cto編者按:在做symbian應用開發和meego應用開發時q框架是乙個統一的開發框架,很多時候需要在qthread的run中new乙個qudpsocket來收發資料.這時,這個socket物件的釋放就成了乙個麻煩的問題.

如果在thread的析構中直接delete這個socket物件,則會出現如下異常:

qsocketnotifier: socket notifiers 

cannot be disabled from another thread

send

events

toobjects

ownedbya

invalid parameter passed to c runtime function. 

invalid parameter passed to c runtime function. 

以下是解決方案:

◆在run()中用while來判斷這個標識,以便於結束socket物件.

◆在thread的析構中,設定標識,並使用quit()和wait().

**如下:

udpsocketthread::udpsocketthread(qobject *parent) : 

qthread(parent) 

udpsocketthread::~udpsocketthread() 

void udpsocketthread::run() 

break; 

} } 

這個執行緒物件的釋放比較有代表性,應該可以解決很多類似的問題.

另外,方法可能還有其他的,這裡只是舉了一種而已.

ps:

經shiroki的指正,其實qt有更好的機制來釋放物件.那就是deletelater(). 於是,事情就顯得非常簡單,請看**:

udpsocketthread::udpsocketthread(qobject *parent) : 

qthread(parent) 

udpsocketthread::~udpsocketthread() 

void udpsocketthread::run() 

取消執行緒,是否會釋放執行緒的所有資源?

include include include include 取消執行緒,是否會釋放執行緒的所有資源?例子 void thread1 void arg int main int argc,char argv pthread cancel t1 printf much too importent這行...

QT中建立執行緒的幾種方式

0x01 使用qrunable來處理耗時的操作 繼承qrunable 的類需要重寫其基類的run 方法,常與執行緒池qthreadpool類一起使用。qthreadpool用於管理qrunable,使用qthreadpool 中的start 方法將qrunable子類置於執行緒池中管理。0x02 採...

QT開發之多執行緒建立使用

建立乙個執行緒類,儲存執行 退出和繼續執行的功能函式 mythread.h ifndef mythread h define mythread h include class mythread public qthread endif mythread hmythread.cpp include m...