成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Qt開發(fā):釋放線程中創(chuàng)建的QUdpSocket對象

移動開發(fā)
在做Symbian應(yīng)用開發(fā)和MeeGo應(yīng)用開發(fā)時Q框架是一個統(tǒng)一的開發(fā)框架,很多時候需要在QThread的run中new一個QUdpSocket來收發(fā)數(shù)據(jù).這時,這個socket對象的釋放就成了一個麻煩的問題.

51CTO編者按:在做Symbian應(yīng)用開發(fā)和MeeGo應(yīng)用開發(fā)時Q框架是一個統(tǒng)一的開發(fā)框架,很多時候需要在QThread的run中new一個QUdpSocket來收發(fā)數(shù)據(jù).這時,這個socket對象的釋放就成了一個麻煩的問題.

如果在thread的析構(gòu)中直接delete這個socket對象,則會出現(xiàn)如下異常:

  1. QSocketNotifier: socket notifiers cannot be disabled from another thread  
  2. ASSERT failure in QCoreApplication::sendEvent: “Cannot send events to objects owned by a different thread. Current thread 560cb8. Receiver ” (of type ‘QNativeSocketEngine’) was created in thread a617748″, file kernel\qcoreapplication.cpp, line 349 
  3. Invalid parameter passed to C runtime function. 
  4. Invalid parameter passed to C runtime function. 

以下是解決方案:

◆在線程中定義一個線程釋放的標(biāo)識

◆在run()中用while來判斷這個標(biāo)識,以便于結(jié)束socket對象.

◆在thread的析構(gòu)中,設(shè)定標(biāo)識,并使用quit()和wait().

代碼如下:

  1. UdpSocketThread::UdpSocketThread(QObject *parent) : 
  2.  QThread(parent) 
  3. this->socket = 0
  4. this->needStop = false
  5.  
  6. UdpSocketThread::~UdpSocketThread() 
  7. this->needStop = true
  8. quit(); 
  9. wait(); 
  10.  
  11. void UdpSocketThread::run() 
  12. socket = new QUdpSocket; 
  13. connect(socket,SIGNAL(readyRead()),this,SLOT(readPendingDatagrams())); 
  14. socket->bind(2234); 
  15. exec(); 
  16. while(this->needStop) 
  17. if(this->socket) 
  18. delete this->socket; 
  19. this->socket = 0
  20. break; 

這個線程對象的釋放比較有代表性,應(yīng)該可以解決很多類似的問題.

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

 

其實,問題的關(guān)鍵就是:線程中創(chuàng)建的對象就必須在線程中釋放.

 

PS:

經(jīng)shiroki的指正,其實QT有更好的機制來釋放對象.那就是deleteLater(). 于是,事情就顯得非常簡單,請看代碼:

  1. UdpSocketThread::UdpSocketThread(QObject *parent) : 
  2.  
  3. QThread(parent) 
  4. socket = 0
  5.  
  6. UdpSocketThread::~UdpSocketThread() 
  7. this->socket->deleteLater(); 
  8. quit(); 
  9. wait(); 
  10.  
  11. void UdpSocketThread::run() 
  12. socket = new QUdpSocket; 
  13. connect(socket,SIGNAL(readyRead()),this,SLOT(readPendingDatagrams())); 
  14. socket->bind(2234); 
  15. exec(); 
  16.  

 

Phone Club——51CTO移動開發(fā)線下技術(shù)沙龍

活動日期:1月15日
本期主題:Android應(yīng)用開發(fā)技術(shù)進(jìn)階
地點:北京市海淀區(qū)中關(guān)村南大街30號東聯(lián)藝術(shù)工社
演講講師:范懷宇(網(wǎng)易)

【編輯推薦】

  1. QTreeWidget設(shè)計解決沒有拖動項問題
  2. Symbian和MeeGo將統(tǒng)一開發(fā)環(huán)境 Qt壓力很大
  3. QtCreator:MeeGo開發(fā)程序入門手冊
  4. 諾基亞發(fā)布Qt 4.6版本 支持多點觸摸和手勢輸入
  5. 在QT SDK下構(gòu)建MeeGo Touch開發(fā)環(huán)境

 

 

責(zé)任編輯:佚名 來源: cuteqt
相關(guān)推薦

2010-03-31 10:07:09

Oracle shar

2010-03-17 14:58:20

Java多線程

2011-06-13 10:03:19

Qt 多線程 編程

2010-03-18 15:31:13

Java創(chuàng)建線程

2011-06-14 11:48:38

Webkit QT

2010-01-21 11:25:44

linux多線程線程資源

2011-06-30 17:31:32

Qt 多線程 信號

2011-06-14 09:46:11

Qt QThread 線程

2011-06-23 15:10:39

Qt 窗體

2011-07-01 11:18:50

Qt 多線程

2011-06-20 13:43:08

Qt Socket 線程

2011-06-24 11:12:39

Qt 多線程 線程

2010-03-18 15:47:07

Java創(chuàng)建線程

2011-06-20 15:52:14

Qt Designer 控件

2011-06-24 11:03:31

Qt 多線程 線程

2011-06-24 10:05:51

QT 對象 父對象

2009-04-30 09:10:42

JavaSwing線程安全

2011-06-14 10:52:10

QT QTreeView

2011-06-13 13:06:48

Gtk Qt

2018-12-19 19:30:46

JavaScript創(chuàng)建對象前端
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 91精品亚洲 | 日韩欧美视频 | 91av在线免费播放 | 精品欧美一区二区三区久久久 | 91在线精品播放 | 在线日韩欧美 | 久久这里只有精品首页 | 成人福利片 | 美女久久视频 | 香蕉视频在线播放 | 亚洲高清视频一区二区 | 亚洲精品第一 | 午夜精品久久久久久久久久久久 | 狠狠躁躁夜夜躁波多野结依 | 亚洲国产精品一区二区三区 | 成人免费视频网站在线观看 | 国产在线中文字幕 | 久久免费看| 国产国产精品久久久久 | 国产玖玖 | 国产高清久久久 | 色.com| 91久久精品国产91久久性色tv | 国产丝袜一区二区三区免费视频 | 一级在线观看 | 男人天堂视频在线观看 | 野狼在线社区2017入口 | 国产二区精品视频 | 在线免费观看视频黄 | 久久精品亚洲精品国产欧美 | 亚洲天堂久久 | 日韩成人av在线 | 成人高潮片免费视频欧美 | 国产精品精品久久久 | 粉嫩一区二区三区性色av | 日韩久久精品视频 | 国产真实乱全部视频 | 黄视频网站免费观看 | 久久国产亚洲 | 免费在线看黄 | 久久国内精品 |