Beispiel #1
0
static SQInteger base_newthread(HSQUIRRELVM v)
{
	SQObjectPtr &func = stack_get(v,2);
	SQInteger stksize = (_funcproto(_closure(func)->_function)->_stacksize << 1) +2;
	HSQUIRRELVM newv = sq_newthread(v, (stksize < MIN_STACK_OVERHEAD + 2)? MIN_STACK_OVERHEAD + 2 : stksize);
	sq_move(newv,v,-2);
	return 1;
}
Beispiel #2
0
/**
 * 情報破棄
 */
void
Thread::_init()
{
	HSQUIRRELVM gv = getGlobalVM();
	sq_newthread(gv, 1024);
	_thread.getStack(gv, -1);
	sq_pop(gv, 1);
}
Beispiel #3
0
HSQOBJECT create_thread(HSQUIRRELVM vm)
{
  HSQUIRRELVM new_vm = sq_newthread(vm, 64);
  if(new_vm == NULL)
    throw SquirrelError(vm, "Couldn't create new VM");

  HSQOBJECT vm_object;
  sq_resetobject(&vm_object);
  if(SQ_FAILED(sq_getstackobj(vm, -1, &vm_object)))
    throw SquirrelError(vm, "Couldn't get squirrel thread from stack");
  sq_addref(vm, &vm_object);

  sq_pop(vm, 1);

  return vm_object;
}
Beispiel #4
0
void SquirrelThread::createThread()
{
    //assert(!m_thread);

    m_thread = sq_newthread(m_parentVm, 1024);  // create m_thread and store it on the stack

    if (0 == m_thread) { 
        ASSERT_NOT_REACHED(); 
        return; 
    }
    
    // Create a HSQOBJECT to hold a reference to the m_thread
    sq_resetobject(&m_threadObj); // init the object

    // store m_thread created by sq_newthread into thread_obj
    if (sq_getstackobj(m_parentVm, -1, &m_threadObj) < 0) { 
        ASSERT_NOT_REACHED(); 
        return; 
    }

    sq_addref(m_parentVm, &m_threadObj); // add reference
    sq_pop(m_parentVm, 1); // remove the m_thread from the stack
}