Example #1
0
	/*void check_scheduled_tasks( void )
	{
	unsigned idx;
	unsigned count;
	time_t now;

	if (p_task_list)
	{
	now = poltime(NULL);
	count = p_task_list->count();
	for( idx = 0; idx < count; idx++ )
	{
	ScheduledTask *task = (*p_task_list)[idx];
	if (task->ready(now))
	{
	task->execute(now);
	}

	if (task->cancelled)
	{
	p_task_list->remove( idx );
	delete task;
	}
	}
	}
	}
	*/
	void check_scheduled_tasks( polclock_t* clocksleft, bool* pactivity )
	{
	  THREAD_CHECKPOINT( tasks, 101 );
	  TaskScheduler::cleanse();

	  polclock_t now_clock = polclock();
	  TRACEBUF_ADDELEM( "check_scheduled_tasks now_clock", now_clock );
	  bool activity = false;
	  passert( !task_queue.empty() );
	  THREAD_CHECKPOINT( tasks, 102 );
	  for ( ;; )
	  {
		THREAD_CHECKPOINT( tasks, 103 );
		ScheduledTask* task = task_queue.top();
        TRACEBUF_ADDELEM( "check_scheduled_tasks toptask->nextrun", task->next_run_clock() );
		THREAD_CHECKPOINT( tasks, 104 );
		if ( !task->ready( now_clock ) )
		{
		  *clocksleft = task->clocksleft( now_clock );
		  *pactivity = activity;
          TRACEBUF_ADDELEM( "check_scheduled_tasks clocksleft", *clocksleft );
		  return;
		}

		THREAD_CHECKPOINT( tasks, 105 );
		if ( !task->late( now_clock ) )
		{
		  INC_PROFILEVAR( tasks_ontime );
		}
		else
		{
		  INC_PROFILEVAR( tasks_late );
		  INC_PROFILEVAR_BY( tasks_late_ticks, task->ticks_late( now_clock ) );
		}

		THREAD_CHECKPOINT( tasks, 106 );
		task_queue.pop();

		THREAD_CHECKPOINT( tasks, 107 );
		task->execute( now_clock );
		THREAD_CHECKPOINT( tasks, 108 );

		activity = true;

		if ( task->cancelled )
		{
		  THREAD_CHECKPOINT( tasks, 109 );
		  delete task;
		}
		else
		{
		  THREAD_CHECKPOINT( tasks, 110 );
		  task_queue.push( task );
		}
		THREAD_CHECKPOINT( tasks, 111 );
	  }
	}
Example #2
0
	void send_ClientTransmit_pulse()
	{
      TRACEBUF_ADDELEM( "ClientTransmitPulse", 1 );
	  PulseEvent( hEvClientTransmit );
	}
Example #3
0
	void send_pulse()
	{
      TRACEBUF_ADDELEM( "Pulse", 1 );
	  PulseEvent( hEvPulse );
	}