I agree with Scott.
busy-loop waiting for tick count implementation.
I have an application where I would like to send UDP frames at a fixed
rate. (for example, 200 byte frames at 50 frames per second.)
But, using the example above, I may only get 320 frames sent in 10
seconds instead of the 500 I would expect.
I've put GetTickCount()s around the sendto() function to see if that
was taking longer than I would expect, but it always says 0 ms.
The code I'm using to transmit the frames is below. I'd love to hear
any suggestions.
Thanks,
PaulH
   //
   // create an empty buffer to pad the frames to the appropriate
size
   //
   std::vector< char > buffer( 200 );
   //
   // Throw unicast frames at the given rate & size to the DUT
   //
   int totalFrames   = static_cast< int >( frames_per_second *
runtime / 1000.0f );
   DWORD dwStartTick = GetTickCount();
   int err           = 0;
   const char *pBuf  = &buffer.front();
   const int bufSize = static_cast< int >( buffer.size() );
   //
   // Create a timer to send frames at a given rate
   //
   HANDLE hTimer              = ::CreateWaitableTimer( NULL, FALSE,
NULL );
   LARGE_INTEGER transmitTime = { 0 };
   transmitTime.QuadPart      = static_cast< LONGLONG >(
       -( 10000000.0f / static_cast< float
( frames_per_second ) ) );
   const int period           = 1000 / frames_per_second;
   ::SetWaitableTimer( hTimer, &transmitTime, period, NULL, NULL,
0 );
   //
   // transmit the test frames
   //
   while( ( err = sendto( dutSocket,
                          pBuf,
                          bufSize,
                          0,
                          reinterpret_cast< SOCKADDR* >( DUTAddr-
ai_addr ),
                          DUTAddr->ai_addrlen ) ) != SOCKET_ERROR &&
          ( GetTickCount() - dwStartTick ) < static_cast< UINT
( runtime ) )
   {
       sentFrames++;
       ::WaitForSingleObject( hTimer, period );
   }