Как стать автором
Обновить
63
0

Погромист

Отправить сообщение
Мне кажется, что в винде через векторные исключения и минидамп можно добиться неплохих результатов примерно так:
код не проверял, вряд ли он рабочий, просто иллюстрация идеи
//где-то в мэйне

bool MINIDUMPFUNC CreateMinidump(PEXCEPTION_POINTERS ep)
{
  char fm[MAX_PATH];
/* тут формируем имя файла дампа как нам нравится */
  HANDLE hFile = CreateFile(fn,
    GENERIC_WRITE,         
    FILE_SHARE_WRITE,      
    NULL,                  
    CREATE_ALWAYS,         
    FILE_ATTRIBUTE_NORMAL, 
    NULL);                 

  if (hFile == INVALID_HANDLE_VALUE) 
  { 
      cout << "Файл минидампа не создан: " << fn << ". Ошибка: " << GetLastError());
      return false;
  }

  MINIDUMP_EXCEPTION_INFORMATION mei;
  mei.ThreadId = GetCurrentThreadId();
  mei.ExceptionPointers = ep;
  mei.ClientPointers = TRUE; //FALSE

  MINIDUMP_USER_STREAM mus[1] = {0};

  MINIDUMP_USER_STREAM_INFORMATION musi;
  musi.UserStreamCount = sizeof(mus) / sizeof(MINIDUMP_USER_STREAM);
  musi.UserStreamArray = mus;

  BOOL ret = MiniDumpWriteDump(
    GetCurrentProcess(),
    GetCurrentProcessId(),
    hFile,
    (MINIDUMP_TYPE)0,  //Тут можно поиграть с детализацией дампа
    ep ? &mei : NULL,
    &musi,
    NULL);
  CloseHandle(hFile);
  if(!ret)
  {
    cout <<  "Ошибка создания минидампа: " << fn << ". Ошибка: " << GetLastError();
    return false;
  }
  else 
  {
    cout << "Создан минидамп: " << fn;
    return true;
  }
}

LONG WINAPI veh(_EXCEPTION_POINTERS *p)
{
//тут можно поставить фильтр на критические исключения, типа AV и реагировать только на них, в общем вариантов много
  if(  CreateMinidump(ep))
    FatalExit(666); //в принципе после создания дампа можем прибить приложение, но это дело вкуса.
  return EXCEPTION_CONTINUE_SEARCH;
}

auto h = AddVectoredExceptionHandler(1, veh);

int main()
{

//здесь наш небезопасный код

}


RemoveVectoredExceptionHandler(VectoredExceptionHandle);

Единственно надо обеспечить, чтобы наш векторный обработчик регистрировался при аттаче и дерегистрировался при детаче dll-лек в наш процесс. Это тривиально.
Может быт не помешает в ту ветвь комментариев добавить ссылку на эту статью? Довольно поучительно ведь получилось.

Хотелось бы уточнить детали:
var PlanetController = new Planets({
    fps: 5
});

Я все правильно понял насчет 5 fps (при том, что на моей машине отнимает > 100 % процессорного времени)? (Каюсь код просмотрел по диагонали, сильно не вникал).
Спасибо. Впредь мне наука — пишешь про один ЯП, не упоминая всуе другой. В общем сам не ожидал.
1.
var t1 = new type1(); var t2 = new type2(); var t3 = new type3(); 
for(var i = 0; i < loops; i++)  { t2.x1 = i; t2.x2 = i + 5; sum += t2.sum(); } //прямой доступ к полям объекта и вызов метода (без замыкания)
for(var i = 0; i < loops; i++)  { t1.setx1(i); t1.setx2(i + 5); sum -= t1.sum(); } //доступ к внутренним переменным через замыкания
for(var i = 0; i < loops; i++)  { t2.setx1(i); t2.setx2(i + 5); sum += t2.sum(); } //доступ к полям объекта через методы (без замыкания)
for(var i = 0; i < loops; i++)  { t3.x1 = i;  t2.x2 = i + 5;  sum -= t2.sum;  } //доступ к внутренним переменным через свойства с замыканиями.

2. Методом индукции.
Но, тон Вашего вопроса мне говорит, что Вы на него ответите лучше меня :)
Ну, слово — не воробей, однако, я не думаю, что предпоследнее слово в последнем абзаце не стоит затеянного холливара. А бросать камни в кого-бы то ни было, и тем более в своих коллег-программистов я бы уж точно не стал. Замечу, что я немного поизучал клиентскую сторону вот этого движка. Так что я не совсем уж не разбираюсь в вопросе. Тем не менее, для большинства областей применения, в которых сейчас используется flash, более чем достаточно «нативной» поддержки JS и Canvas. И вот тут-то эта пара уже вполне конкурентна.
Для того, чтобы в тесте сравнить быстродействие псевдоклассов и наследования, построенных на прототипировании, нужно сильно перекроить имеющуюся объектную модель. Скажу только, что начинал я именно с этого, но результат, мягко скажем, был никакой, как в плане производительности, так и в плане поддержки. Что касается замыканий и свойств, то ссылка на код теста есть прямо в том же пункте. Я не исключаю, что я где-то сильно заблуждаюсь, но вероятность этого мне кажется мала.
Мне самому бы разобраться. Но, согласитесь, вдохновляет!
Да, цифры не касаются flash, но и фору можно дать не только в производительности. Попробуйте получить 60 fps во flash приложении на Android-ном устройстве и все станет понятно (кстати, Вы уже удалили его со своего телефона?). я не собирался как-то обидеть флэшистов, просто на мой взгляд, JS сейчас, с появлением Canvas, вполне себе конкурент flash-у.
Если по существу, то я программист, а не гейм-дизайнер, не игровой сценарист, и ни не Кармак. Впрочем я и не претендовал. Тем не менее, мне кажется, что все идет к тому, что браузерные приложения очень даже скоро станут конкурентоспособными, а на мобильных девайсах будут доминировать. И мне показалось интересным пощупать возможности современного JS и HTML5. Если Вас смущает тег Game Development, то это просто следствие выбора темы для экспериментов (я вроде ее постарался обосновать вначале).
Пока мне не очень ясно какие преимущества это даст. Если у Вас есть какой-то положительный опыт с таким подходом, было бы интересно услышать. Но, КМК, браузеры выполняют JS в одном потоке и все отложенные вызовы будут выполняться псевдоасинхронно. Потому суммарное время выполнение кода не сократится, а может даже вырасти, т.к. движку придется планировать несколько вызовов в контексте одного единственного потока.
Ну, собственно, там тот же адрес, что и у тестов, только без # (который просто позволяет вводить чит-коды, без заморочек с консольным режимом, хоть и он тоже есть). Только на данном этапе развития, называть ее игрой, откровенно говоря, я бы не рискнул пока. Это скорее proof of concept движка игры + некоторые идеи, воплощенные вчерне (так сказать — задел на будущее).
12 ...
15

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность