示例#1
0
void fx_setTimeout(txMachine* the)
{
	txTimeoutData* data;
#if mxMacOSX
	CFRunLoopTimerContext context;
#endif
	txNumber duration = fxToNumber(the, mxArgv(1)) / 1000;
	
	data = c_malloc(sizeof(txTimeoutData));
	mxElseError(data);
	c_memset(data, 0, sizeof(txTimeoutData));
	data->the = the;
	data->function.kind = mxArgv(0)->kind;
	data->function.value = mxArgv(0)->value;
	fxRemember(the, &(data->function));
	if (mxArgc > 2) {
		data->argument.kind = mxArgv(2)->kind;
		data->argument.value = mxArgv(2)->value;
	}
	fxRemember(the, &(data->argument));
#if mxMacOSX
	memset(&context, 0, sizeof(context));
	context.info = data;
	context.release = fx_setTimeoutRelease;
	data->timer = CFRunLoopTimerCreate(kCFAllocatorDefault, CFAbsoluteTimeGetCurrent() + duration, 0, 0, 0, fx_setTimeoutCallback, &context);
	CFRunLoopAddTimer(CFRunLoopGetCurrent(), data->timer, gxRunLoopMode);
#endif
}
示例#2
0
FskErr KprPromiseTargetNew(KprPromiseTarget* it, xsMachine* the, xsSlot* resolve, xsSlot* reject)
{
	KprPromiseTarget self;
	FskErr err = kFskErrNone;
	bailIfError(FskMemPtrNewClear(sizeof(KprPromiseTargetRecord), it));
	self = *it;
	self->the = the;
	self->resolve = *resolve;
	self->reject = *reject;
	fxRemember(self->the, &self->resolve);
	fxRemember(self->the, &self->reject);
bail:
	return err;
}
示例#3
0
FskErr KprFunctionTargetNew(KprFunctionTarget* it, xsMachine* the, xsSlot* slot)
{
    KprFunctionTarget self;
    FskErr err = kFskErrNone;
    bailIfError(FskMemPtrNewClear(sizeof(KprFunctionTargetRecord), it));
    self = *it;
    self->the = the;
    self->slot = *slot;
    self->code = the->code;
    fxRemember(self->the, &self->slot);
bail:
    return err;
}