Оглавление

Таймаут выполнения скрипта

Если скрипт затянул время, предоставленное ему на выполнение возложенных на него задач, его можно прервать с помошью функции обратного вызова, а затем возобновить исполнение.

Перед запуском скрипта поставьте каллбек, как на примере:

void ExecuteScript()
{
  DWORD timeOut;
  ctx->SetLineCallback(asFUNCTION(LineCallback), &timeOut, asCALL_CDECL);

  int status = asEXECUTION_SUSPENDED;
  while( status == asEXECUTION_SUSPENDED )
  {
    // Позволяем выполнятся 10мс
    timeOut = timeGetTime() + 10;
    status = ctx->Execute();
  
    // Выполнение прервано, теперь мы можем сделать что-то еще прежде чем продолжить выполнение вызовом Execute().
    ...
  }
}

void LineCallback(asIScriptContext *ctx, DWORD *timeOut)
{
  // If the time out is reached we suspend the script
  if( *timeOut < timeGetTime() )
    ctx->Suspend();
}

Чтобы получше разобраться как это работает, взгляните на пример Events.


Перевод - arroy.one@gmail.com. При копировании материалов указывайте ссылку на источник.