2014-02-18 2 views
0

타이머가 만료 될 때마다 udp 패킷을 보내는 스레드가 있습니다. 타이머 간격은 20 초입니다. send_data 함수에 시간 초과 신호를 연결했습니다. 함수에서 일부 작업을 수행하고 패킷을 보내고 있습니다. udp. 함수에서 함수를 소비하는 시간을 알기 위해 타이머를 추가했습니다.UTp 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; 
    } 

내가 경과 시간을 인쇄하고, 시간이 때로는 7MS이다 나는 그것이 정상입니다 생각하지만, 때때로 저를 오는 0 이상해은 전송 UDP 패킷에 관련된 문제입니다 생각하는 기능을 수행합니다 제 시간에 돌아 오지 않습니까? 문제는 무엇입니까?

+0

당신은'send_data'에서'QElapsedTimer'를 사용했다는 것을 의미한다고 생각합니까? 또한'send_data'의 본문을 게시 할 수 있습니까? 우리는 당신이 그것없이 얻는 결과를 설명 할 수 없습니다. –

+0

@RA 감사합니다. 편집했습니다. – barp

답변

0

t.elapsed가 생성 할 수있는 값은 1 씩 올라갈 필요가 없으며 시스템 시계에서 일부 수단으로 추출됩니다 (변경 될 수 있음). 따라서 사용중인 시계가 7 밀리 초 단위로 올라가고 writeDatagram이 4 밀리 초가 걸리면 시계가 틱하지 않았기 때문에 0이 반환되고, 시계 틱이 발생했기 때문에 가끔 다시 7이됩니다. 그 4 밀리 초.

관련 문제