Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
PELMESHKA58
0 / 1 / 0
Регистрация: 31.12.2014
Сообщений: 15
1

Бесконечный цикл в потоке, StackOverflowException

21.06.2017, 12:27. Просмотров 360. Ответов 2
Метки нет (Все метки)

Мне нужна рекурсия в отдельном потоке, перебирающая делегаты и вызывающая их в соответствии с секундомером.
При работе более 10 секунд вылетает StackOverflowException (а если убрать Sleep, то вообще сразу). Стек вызовов заполнен предпоследней строкой метода - Tick(Input).
Можно ли приостановить заполнение стека до выполнения метода? Или как еще это можно исправить?
Код:
Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
private static Stopwatch Ticker = new Stopwatch();
private Thread TickerThread = new Thread(Tick);
private void Tick(object Input)
{
    List<double> clear = new List<double>();
    foreach (double time in Functions.Keys)
    {
        if (time <= Elapsed)
        {
            Functions[time].DynamicInvoke();
            clear.Add(time);
        }
    }
    foreach (double time in clear)
        Functions.Remove(time);
    Elapsed = Ticker.ElapsedMilliseconds;
    Tick(Input)
    Thread.Sleep(1);
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.06.2017, 12:27
Ответы с готовыми решениями:

бесконечный цикл в отдельном потоке
Здравствуйте! Помогите пожалуйста решить проблему. Есть метод relayStatus. Данный метод...

Бесконечный цикл
Как сделать чтобы в консольном приложении цикл выполнялся бесконечно и без остановок, но если я...

Бесконечный цикл
Хелп, не могу избавиться от бесконечной рекурсии public void Run2(string str,int i) { ...

Бесконечный цикл
private void button1_Click(object sender, EventArgs e) { do { ...

Бесконечный цикл
Сделал класс с методами для конвертации из двенадцатеричной системы счисления в двоичную....

2
Rius
Эксперт .NET
5882 / 3762 / 908
Регистрация: 25.05.2015
Сообщений: 11,453
Записей в блоге: 12
Завершенные тесты: 4
21.06.2017, 12:30 2
Функция вызывает сама себя. Стек переполняется. Всё очевидно.
Зачем вам рекурсия?

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
private void Tick(object Input)
{
    while (true) {
      List<double> clear = new List<double>();
      foreach (double time in Functions.Keys)
      {
          if (time <= Elapsed)
          {
              Functions[time].DynamicInvoke();
              clear.Add(time);
          }
      }
      foreach (double time in clear)
          Functions.Remove(time);
      Elapsed = Ticker.ElapsedMilliseconds;
      Thread.Sleep(1);
    }
}
0
PELMESHKA58
0 / 1 / 0
Регистрация: 31.12.2014
Сообщений: 15
21.06.2017, 12:44  [ТС] 3
Блин, забыл про while... Спасибо!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.06.2017, 12:44

Бесконечный цикл
Пишу утилиту, которая считывает данные из экселя раз в минуту. На форме два радиобатона вкл/вкл....

вложенный цикл (бесконечный?)
Здравствуйте всем. for (int i = 0; i &lt; list.Count; i+2) { int a =0; while(list != list) ...

Бесконечный цикл с задержкой
Нужен бесконечный цикл с периодом выполнения в 1 сек for (int i = 0; i &lt; 10; i++) ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru