ThreadPool проблема зависания
От: zoom-zoom  
Дата: 12.01.15 12:08
Оценка: :))
День добрый!
Нужен был таймер сверхбыстрый, решил проблему с помощью while, который работает в отдельном потоке:

private static AutoResetEvent autoEvent1 = new AutoResetEvent(false);
private static AutoResetEvent autoEvent2 = new AutoResetEvent(false);
bool b1 = false;
bool b2 = false;
private void button_Click(object sender, EventArgs e)
{
  b1 = true;
  ThreadPool.QueueUserWorkItem(new WaitCallback(tread1), autoEvent1);
  b2 = true;
  ThreadPool.QueueUserWorkItem(new WaitCallback(tread2), autoEvent2);
}
private void tread1(object state)
{
  while (b1)
  {
    ... //вычисления
    Thread.Sleep(1);
    ((AutoResetEvent)state).Set();
  }
}
private void tread2(object state)
{
  while (b2)
  {
    ... //вычисления
    Thread.Sleep(1);
    ((AutoResetEvent)state).Set();
  }
}


После достаточно продолжительного времени, более 2-х часов работы все приложение WinForm зависает.
Работаю в VS2010. Запускаю приложение в отладчике. При зависании приложения нажимаю на Паузу, остановка идет на каком-либо Thread.Sleep(1).
Дальнейшее пошаговое выполнение идет только по одному циклу while, например в tread1, в другой поток tread2 не заходит. Не пойму, как такое может быть и как это исправить?
Отредактировано 12.01.2015 12:33 zoom-zoom . Предыдущая версия . Еще …
Отредактировано 12.01.2015 12:27 zoom-zoom . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.