Тема: ProcessMessages
Показать сообщение отдельно
  #18 (permalink)  
Старый 07.09.2014, 20:05
Новичок на форуме
Отправить личное сообщение для Владимир_Фомин Посмотреть профиль Найти все сообщения от Владимир_Фомин
 
Регистрация: 06.09.2014
Сообщений: 2

Сообщение от Aetae Посмотреть сообщение
По старинке: дробить вычисления setTimeout'ами.
Вот именно! Очень хотелось бы без всяких премудростей setTimeout'ами добиться того, чтобы браузер не зависал.

Но куда вставлять этот setTimeout, если функция, вызывающая зависание браузера, рекурсивная?

function recfrugal(k)
{
  var i;
  var j;
  var t;
  var q;
  if (k == 82)
  {
    u++;
    for (i = 1; i <= 81; i++) z[i][u] = s[i]
  }
  if ((k <= 81) && (u < 10))
  {
    if ((w[k] == 0) || (w[k] == 1)) recfrugal(k+1);
    if (w[k] > 1)
    {
      for (t = 1; t <= w[k]; t++)
      {
        q = true;
        for (j = 1; j <= 20; j++) if (b[k][t] == s[m[k][j]]) q = false;
        if (q == true)
        {
          s[k] = b[k][t];
          c++;
          recfrugal(k+1);
        }
      }
      s[k] = 0;
      c++;
    }
  } 
}


Если заменить рекурсивный вызов recfrugal(k+1); вот так:
setTimeout(function() { recfrugal(k+1) }, 1000);

то ничего не получается, так как она просто будет через него перескакивать, корректного результата не получится.
Ответить с цитированием