Beispiel #1
0
FskErr KplUIEventNew(KplUIEvent *event, UInt32 eventID, KplTime eventTime)
{
	FskErr err;
	KplUIEvent eventOut = 0L;
	KplTimeRecord now;
	
	if (!eventTime) {
		KplTimeGetNow(&now);
		eventTime = &now;
	}
	
	err = FskMemPtrNewClear(sizeof(KplUIEventRecord), (FskMemPtr*)&eventOut);
	if (err) goto bail;
	
	eventOut->eventID = eventID;
	eventOut->eventTime = *eventTime;
	
bail:
	if (err) {
		KplUIEventDispose(eventOut);
		eventOut = 0L;
	}
	*event = eventOut;
	
	return err;
}
Beispiel #2
0
void setupTestNotifier(UInt32 propertyID)
{
	KplTimeRecord when;
	KplTimeCallbackNew(&gTimeCB);
	KplTimeGetNow(&when);
	when.seconds += 1;
	KplTimeCallbackSet(gTimeCB, &when, testNotifierCallback, (void*)propertyID);
}
Beispiel #3
0
static void testNotifierCallback(KplTimeCallback cb, const KplTime time, void *param)
{
	UInt32 propertyID = (UInt32)param;
	KplTimeRecord when;
	
	notifyPropertyChanged(propertyID);
	
	KplTimeGetNow(&when);
	when.seconds += 1;
	KplTimeCallbackSet(gTimeCB, &when, testNotifierCallback, (void*)propertyID);
}
UInt32 KplTimeCallbackGetNextTimeDelta()
{
	KplTimeRecord now, nextTimeBasedCallback;
	SInt32 msec;

	KplTimeGetNow(&now);
	KplTimeCallbackGetNextTime(&now, &nextTimeBasedCallback, NULL);
	FskTimeSub((FskTime)&now, (FskTime)&nextTimeBasedCallback);
	msec = FskTimeInMS((FskTime)&nextTimeBasedCallback);

	// Clamp
	if (msec > 1000000)
		msec = 1000000;
	else if (msec < 1)
		msec = 1;

	return msec;
}
// Insert this timer callback into the owning thread's "timerCallbacks" queue.
void sInsertInTime(KplTimeCallback el)
{
	KplTimeCallback cur, last = NULL;
	Boolean reschedule = false;
	KplTimeRecord now;
	KplThread thread;

	thread = (KplThread)el->owner;

	KplTimeGetNow(&now);
	if (1 == FskTimeCompare((FskTime)&el->trigger, (FskTime)&now))
		el->trigger = now;
	cur = (KplTimeCallback)FskListGetNext(thread->timerCallbacks, NULL);
	el->next = NULL;
	el->marked = false;

	if (cur == NULL) {
		FskListPrepend(&thread->timerCallbacks, el);
		reschedule = true;
		goto done;
	}
	while (cur) {
		if (FskTimeCompare((FskTime)&el->trigger, (FskTime)&cur->trigger) > 0) {
			if (last == NULL) {
				reschedule = true;
			}
			FskListInsertAfter(&thread->timerCallbacks, el, last);
			goto done;
		}

		last = cur;
		cur = cur->next;
	}
	if (!cur && last) {
		FskListAppend(&thread->timerCallbacks, el);
	}
	
done:
	if (reschedule)
		rescheduleTimer(thread);
}