Сообщение ThreadPool проблема зависания от 12.01.2015 12:08
Изменено 12.01.2015 12:33 zoom-zoom
День добрый!
Нужен был таймер сверхбыстрый, решил проблему с помощью while, который работает в отдельном потоке:
После достаточно продолжительного времени, более 2-х часов работы все приложение WinForm зависает.
Работаю в VS2010. Запускаю приложение в отладчике. При зависании приложения нажимаю на Паузу, остановка идет на каком-либо Thread.Sleep(1).
Дальнейшее пошаговое выполнение идет только по одному циклу while, например в tread1, в другой поток tread2 не заходит. Не пойму, как такое может быть и как это исправить?
Нужен был таймер сверхбыстрый, решил проблему с помощью 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 не заходит. Не пойму, как такое может быть и как это исправить?
ThreadPool проблема зависания
День добрый!
Нужен был таймер сверхбыстрый, решил проблему с помощью while, который работает в отдельном потоке:
После достаточно продолжительного времени, более 2-х часов работы все приложение WinForm зависает.
Работаю в VS2010. Запускаю приложение в отладчике. При зависании приложения нажимаю на Паузу, остановка идет на каком-либо Thread.Sleep(1).
Дальнейшее пошаговое выполнение идет только по одному циклу while, например в tread1, в другой поток tread2 не заходит. Не пойму, как такое может быть и как это исправить?
Нужен был таймер сверхбыстрый, решил проблему с помощью 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 не заходит. Не пойму, как такое может быть и как это исправить?