2014-02-18 24 views
0

我有一個線程,每發送一個定時器到期時發送udp數據包。定時器間隔爲20秒。我將超時信號連接到send_data函數。在函數中,我正在做一些工作併發送數據包在函數中,我還添加了一個定時器來知道函數消耗了多少時間。Udp寫入QT定時器信號的數據報

QTimer timer; 

    timer.setInterval(20); 

    connect(timer,signal(timeout()),slot(send_data()); 

    send_data(){ 

    QElapsedTimer t; 

    t.start(); 

    mysocket.writedatagram();//Do some work and send data via Udp 

    cout<<t.elapsed()<<endl; 
    } 

我打印所經過的時間,時間爲7毫秒,有時我認爲這是正常的,但有時卻是0自帶我weird.I認爲這是發送與UDP數據包的問題,​​該函數沒有及時返回?可能是什麼問題?

+0

我假設你的意思是你在'send_data'中使用了'QElapsedTimer'?另外,你可以發佈'send_data'的主體嗎?我們無法解釋沒有它的結果。 –

+0

@RA謝謝。我編輯。 – barp

回答

0

t.elapsed生成的值不一定要以1爲單位上升,它們將通過某種方式從系統時鐘中提取出來(可以變化)。因此,如果它使用的時鐘以7毫秒爲單位上升,並且writeDatagram需要4毫秒,有時您會回到零,因爲時鐘沒有打勾,有時您會返回7,因爲時鐘滴答確實發生在那4毫秒。