在做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...