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

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

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

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

如果在thread的析構(gòu)中直接delete這個(gè)socket對(duì)象,則會(huì)出現(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. 

以下是解決方案:

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

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

◆在thread的析構(gòu)中,設(shè)定標(biāo)識(shí),并使用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; 

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

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

 

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

 

PS:

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

  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移動(dòng)開發(fā)線下技術(shù)沙龍

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

【編輯推薦】

  1. QTreeWidget設(shè)計(jì)解決沒有拖動(dòng)項(xiàng)問題
  2. Symbian和MeeGo將統(tǒng)一開發(fā)環(huán)境 Qt壓力很大
  3. QtCreator:MeeGo開發(fā)程序入門手冊(cè)
  4. 諾基亞發(fā)布Qt 4.6版本 支持多點(diǎn)觸摸和手勢(shì)輸入
  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)建線程

2010-01-21 11:25:44

linux多線程線程資源

2011-06-14 11:48:38

Webkit QT

2011-06-14 09:46:11

Qt QThread 線程

2011-06-30 17:31:32

Qt 多線程 信號(hào)

2011-06-23 15:10:39

Qt 窗體

2011-07-01 11:18:50

Qt 多線程

2010-03-18 15:47:07

Java創(chuàng)建線程

2011-06-24 11:03:31

Qt 多線程 線程

2011-06-20 13:43:08

Qt Socket 線程

2011-06-24 11:12:39

Qt 多線程 線程

2011-06-20 15:52:14

Qt Designer 控件

2009-04-30 09:10:42

JavaSwing線程安全

2011-06-22 10:12:08

Qt 線程

2011-06-13 13:06:48

Gtk Qt

2011-06-14 10:52:10

QT QTreeView

2018-12-19 19:30:46

JavaScript創(chuàng)建對(duì)象前端
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 一级做a爰片性色毛片16 | 欧美一区二区免费电影 | 国内精品伊人久久久久网站 | 无码一区二区三区视频 | 欧美日韩在线免费观看 | 丁香综合| 国产精品一区二区久久 | 91国语清晰打电话对白 | 97日日碰人人模人人澡分享吧 | 日韩精品一区二区不卡 | h视频在线观看免费 | 中文字幕在线观看一区 | 国产成人精品久久二区二区91 | 成人免费小视频 | 我爱操| 亚洲在线| 天天综合国产 | 精品久久久久久久 | 免费国产一区二区 | 天堂一区二区三区四区 | h视频网站在线观看 | 国产a级黄色录像 | 欧美一级二级视频 | 国产精品成人一区二区三区吃奶 | 亚洲成人精品国产 | 一区二区三区视频在线观看 | 草久久 | 亚洲高清免费 | 国产亚洲精品成人av久久ww | 乱码av午夜噜噜噜噜动漫 | 日韩午夜网站 | 91亚洲国产成人久久精品网站 | 久久三区| 国产成人在线免费 | 97伦理| 亚洲国产乱码 | 美女黄网站 | 国产视频三级 | 国产精品久久久久一区二区三区 | 欧美精品一区二区免费 | 精品久久一区 |