예제 #1
0
	def __iter__(self):
		if self.initialIteration:
			yield 0, 0
			
		while now() < self.endTimeMS:
			currentTimeMS = now() # keep it internally consistent, 
								# but yield at end will be ever so slightly off
			
			nextStepNumber = (currentTimeMS + self.stepTimeMS - self.startTimeMS) // self.stepTimeMS
			nextStepTime  = (nextStepNumber * self.stepTimeMS) + self.startTimeMS
			
			self.count = nextStepNumber
			
			if nextStepTime > self.endTimeMS:
				nextStepTime = self.endTimeMS
			
			# The extra +1ms here is to ensure we don't undershoot and loop too many times
			remainingWaitTime = nextStepTime - currentTimeMS + 1 
			
			if remainingWaitTime > 0:
				sleep( remainingWaitTime / 1000.0 )
			
			newCurrentTimeMS = now()
			lastStepDuration = (newCurrentTimeMS - self.lastStepTimeMS) / 1000.0
			self.lastStepTimeMS = newCurrentTimeMS
			
			
			yield self.count, lastStepDuration
예제 #2
0
	def __iter__(self):
		if self.initialIteration:
			self.count += 1
			yield 0, 0
			
		while now() < self.endTimeMS:
			currentTimeMS = now() # keep it internally consistent, 
								# but yield at end will be ever so slightly off
								
			if self.lastStepTimeMS + self.stepTimeMS > self.endTimeMS:
				remainingWaitTime = self.startTimeMS + self.maxTimeMS - currentTimeMS
			else:
				# The extra +1ms here is to ensure we don't undershoot and loop too many times
				remainingWaitTime = self.lastStepTimeMS + self.stepTimeMS - currentTimeMS + 1
				
			if remainingWaitTime > 0:
				sleep(remainingWaitTime / 1000.0)
			
			self.count += 1
			newCurrentTimeMS = now()
			lastStepDuration = (newCurrentTimeMS - self.lastStepTimeMS) / 1000.0
			self.lastStepTimeMS = newCurrentTimeMS
			yield self.count, lastStepDuration
예제 #3
0
	def __init__(self, maxTime=0.0, stepTime=0.0, numSteps=0, initialIteration=True):

		maxTimeMS = maxTime * 1000.0
		stepTimeMS = stepTime * 1000.0

		if maxTimeMS and numSteps and not stepTimeMS:
			stepTimeMS = maxTimeMS / numSteps
		self.stepTimeMS = stepTimeMS
		self.maxTimeMS = maxTimeMS
		self.initialIteration = initialIteration

		self.startTimeMS = now()
		self.count = 0
		self.endTimeMS = self.startTimeMS + self.maxTimeMS
		self.lastStepTimeMS = self.startTimeMS
예제 #4
0
	def __exit__(self, exc_type, exc_val, exc_tb):
		timeRemainingMS = self.endTimeMS - now()
		if timeRemainingMS > 0:
			sleep(timeRemainingMS / 1000.0)
예제 #5
0
	def __enter__(self):
		self.startTimeMS = now()
		self.endTimeMS = self.startTimeMS + self.delayMS
		return lambda : self.endTimeMS - now()