Beispiel #1
0
  void APIC_Timer::oneshot(std::chrono::microseconds micros) noexcept
  {
    // prevent overflow
    uint64_t ticks = micros.count() * ticks_per_micro;
    if (ticks > 0xFFFFFFFF) ticks = 0xFFFFFFFF;

    // set initial counter
    auto& lapic = APIC::get();
    lapic.timer_begin(ticks);
    // re-enable interrupts if disabled
    if (GET_TIMER().intr_enabled == false) {
      GET_TIMER().intr_enabled = true;
      lapic.timer_interrupt(true);
    }
  }
Beispiel #2
0
int main( int argc, char **argv )
{
	ALLEGRO_DISPLAY *display = NULL;
	ALLEGRO_EVENT_QUEUE *event_queue = NULL;
	

	//VARIABLES
	const int FPS =200;
	bool redraw = true;
	bool jump = false;
	SCR_CREATE_DISPLAY
	INIT_ALLEGRO_ADDONS
	
	initGameCore();

	event_queue = al_create_event_queue();
	timer = al_create_timer(1.0 / FPS);

	REGISTER_QUEUE

	al_clear_to_color(al_map_rgb(0,0,0));

	srand(time(NULL));
	al_start_timer(timer);
	
	while(!done)
	{
		ALLEGRO_EVENT ev;
		al_wait_for_event(event_queue, &ev);
		
		if(ev.type == ALLEGRO_EVENT_DISPLAY_CLOSE) { done = true; } 
		else if( (ev.type == ALLEGRO_EVENT_KEY_DOWN)||(ev.type == ALLEGRO_EVENT_KEY_UP) )
		{ manageKeys(ev); }
		if(ev.type == ALLEGRO_EVENT_TIMER)
		{
			//cout << "loop\n";
			managePlayer();
			//cout << "going for progress\n";
			AnimatorHolder::Progress( GET_TIMER(timer) );
			terrain->drawTerrain();
			AnimatorHolder::Draw();
			//cout << "leaving for progress\n";
			DestructionManager::Commit();

			al_flip_display();
			al_clear_to_color(al_map_rgb(0,0,0));
		}
	}


	DESTROY_SEQ	

	return 1;
}
void CHiFreqTimer::TimingDetails::Setup()
{
	LARGE_INTEGER freq;
	if (QueryPerformanceFrequency(&freq) == 0)
	{
		MessageBox(0, "Timer not supported", "Error", MB_OK);
		exit(0);
	}
	perFreq = ((double)freq.QuadPart) / 1000;
	nextTimer = curBase = curManualBase = 0;

	int i, loops = 1000;
	void* Fred = GetCurrentThread();
	int CurPri = GetThreadPriority(Fred);
	SetThreadPriority(Fred, THREAD_PRIORITY_HIGHEST);
	Sleep(100);

	LARGE_INTEGER pTest;
	{TIME_SCOPE("ss overhead")
	for (i = 0; i < loops; i++)
	{
		QueryPerformanceCounter(&pTest);
		QueryPerformanceCounter(&pTest);
		QueryPerformanceCounter(&pTest);
		QueryPerformanceCounter(&pTest);
		QueryPerformanceCounter(&pTest);
		QueryPerformanceCounter(&pTest);
		QueryPerformanceCounter(&pTest);
		QueryPerformanceCounter(&pTest);
		QueryPerformanceCounter(&pTest);
		QueryPerformanceCounter(&pTest);
	}
	}
	startstopOverhead = GET_TIMER("ss overhead").getTotalTime() / (loops * 10);
	CLEAR_TIMERS

	for (i = 0; i < loops; i++)
	{TIME_SCOPE("nested")
		{TIME_SCOPE("sub")
	}}
	nestedOverhead = GET_TIMER("nested").getAverageTime();
	CLEAR_TIMERS
	for (i = 0; i < loops; i++)
	{TIME_SCOPE("nested")
		{
			TIMER_START("sub")
			TIMER_STOP("sub")
		}
	}
	manualNestedOverhead = GET_TIMER("nested").getAverageTime();// * 1.4;
	CLEAR_TIMERS

#ifdef _CLOCKTICKS
	// Look at clock speed
	__int64 res;
	{TIME_SCOPE("ticktock")
	_asm 
	{
		rdtsc
		push eax
		push edx
	}
	testfun();
	_asm
	{
		rdtsc
		pop ebx
		sub edx, ebx
		pop ebx
		sub eax, ebx
		mov dword ptr [res], eax
		mov dword ptr [res+4], edx
	}
	}
	clockSpeed = res / GET_TIMER("ticktock").getTotalTime();
	CLEAR_TIMERS
#endif

	SetThreadPriority(Fred, CurPri);
}
Beispiel #4
0
unsigned long get_timer(unsigned long base)
{
	return(GET_TIMER(base));
}
Beispiel #5
0
 void APIC_Timer::stop() noexcept
 {
   GET_TIMER().intr_enabled = false;
   APIC::get().timer_interrupt(false);
 }