九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
qt子線程run中生成的定時(shí)器失效問題解決

問題的提出:

最近做項(xiàng)目,需在子線程中生成定時(shí)器,但發(fā)現(xiàn)在構(gòu)造函數(shù)中生成定時(shí)器時(shí),會(huì)報(bào)如下錯(cuò)誤:

QObject: Cannot create children for a parent that is in a different thread.

從網(wǎng)上查資料說,必須將定時(shí)器創(chuàng)建函數(shù)放在線程的run函數(shù)中才行,即按如下那樣:

void CClientThread ::run()

{

        timerId = startTimer(5000);

但這樣在線程run函數(shù)里創(chuàng)建定時(shí)器,會(huì)導(dǎo)致定時(shí)器有時(shí)失效。經(jīng)測(cè)試發(fā)現(xiàn),10次有2到3次定時(shí)器不響應(yīng)。后查資料得到解決方案如下:

從QTimer派生出一個(gè)子類。如下:

class CCmdTimer :
 public QTimer
{
 Q_OBJECT
public:
 CCmdTimer();
 ~CCmdTimer(void);

 

該子類啥都不干,沒有其他成員函數(shù)。

 

然后在CClientThread中有一個(gè)CCmdTimer的成員指針對(duì)象,并在run中構(gòu)造出該對(duì)象

void CClientThread ::run()

{      

         m_pCmdTimer = new CCmdTimer;

      // 構(gòu)造定時(shí)器超時(shí)信號(hào)槽

       connect(m_pCmdTimer, SIGNAL(timeout()), this, SLOT(timeArrived()), Qt::DirectConnection);

       } 

在 CClientThread類的timeArrived中響應(yīng)定時(shí)器的timeout()信號(hào)

void CClientThread::timeArrived()

{

}

 

// CClientThread.h

private slots: 

    void timeArrived();


上述方案完滿解決該問題
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Qt之保持GUI響應(yīng)
Qt中定時(shí)器使用的兩種方法
Qt——線程與定時(shí)器
重新實(shí)現(xiàn)事件處理函數(shù)(Reimplementing Event Handlers)
02、Qt定時(shí)器及實(shí)現(xiàn)(詳解)
第七章 Qt事件(event)處理
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服