Имеется кусок кода:
Не объясните что здесь происходит и как его переписать на с#?
:
#define PULSE_PER_SECOND 4
void game_loop_unix( int control )
{
static struct timeval null_time;
struct timeval last_time;
gettimeofday( &last_time, NULL );
current_time = ( time_t) last_time.tv_sec;
/* Main loop */
while ( true )
{
/*
* Synchronize to a clock.
* Sleep( last_time + 1/PULSE_PER_SECOND - now ).
* Careful here of signed versus unsigned arithmetic.
*/
{
struct timeval now_time;
long secDelta;
long usecDelta;
gettimeofday( &now_time, NULL );
usecDelta = ( (int) last_time.tv_usec) - ( (int) now_time.tv_usec) + 1000000 / PULSE_PER_SECOND;
secDelta = ( (int) last_time.tv_sec ) - ( (int) now_time.tv_sec );
while ( usecDelta < 0 )
{
usecDelta += 1000000;
secDelta -= 1;
}
while ( usecDelta >= 1000000 )
{
usecDelta -= 1000000;
secDelta += 1;
}
if ( secDelta > 0 || ( secDelta == 0 && usecDelta > 0 ) )
{
struct timeval stall_time;
stall_time.tv_usec = usecDelta;
stall_time.tv_sec = secDelta;
if ( select( 0, NULL, NULL, NULL, &stall_time ) < 0 )
{
perror( "Game_loop: select: stall" );
exit( 1 );
}
}
}
gettimeofday( &last_time, NULL );
current_time = ( time_t) last_time.tv_sec;
}
return;
}