2016-04-04 11 views
2

Göndericiden bir alıcı dizisine paket gönderiyorum. Gönderme hızını (saniye başına paket) kontrol etmek için, belirli bir gönderme oranını korumak için bir sonraki paketi göndermeden önce beklemem gereken zamanı hesaplıyorum.clock() ve usleep() eşleşmiyor

Beklemek için gereken sürenin 100 mikrosaniye olduğu hesaplandığını varsayalım. Ben yine saatin kaç olduğunu kontrol usleep(100);

  • diyoruz (double)(clock() - start)/CLOCKS_PER_SEC;
  • :

    1. ben saatin kaç olduğu kontrol (double)(clock() - start)/CLOCKS_PER_SEC; Ben sadece saatin kaç olduğunu kontrol 3. adımda, içinde

    50 mikrosaniye geçmiştir (usleep dönüş değerini kontrol ettim ve 0 döndürdüğünü doğruladım).

    Bu neden? en az 100 mikrosaniye için uyumaya değmez mi? Veya clock() ile kullanmam gereken farklı bir uyku fonksiyonu var mı? Herhangi bir öneri için teşekkürler

  • +0

    "Uyuma" ne demektir? 0 veya -1? – Cornstalks

    +0

    usleep 0 döndürüyor. Duvar saati süresini nasıl alabilirim? –

    +0

    nevermind bir örnek buldum. teşekkürler Joachim! –

    cevap

    2

    clock işlevi, (Windows Visual Studio çalışma zamanı kitaplığı size verir) duvar saatini değil, geçen işlem süresini vermek için tanımlanmıştır. İşleminiz gerçekten çalışmıyorsa, çünkü uyumakta, işlemci zaman aşımına uğramıyor

    Duvar saati platformunuza nasıl bağlıdır, ancak POSIX'te (Linux, OSX veya BSD türevleri gibi) önerilen yol CLOCK_REALTIME saatiyle clock_gettime.

    +0

    MSVC 'clock' işlevi standart olmayan bir uygulamadır. Windows ayrıca ['GetProcessTimes' işlevi] (https://msdn.microsoft.com/library/windows/desktop/ms683223) ve [' QueryProcessCycleTime' işlevi] 'ne sahiptir (https://msdn.microsoft.com/en- gb/library/windows/desktop/ms684929) fakat clock_gettime' değil. –

    İlgili konular