Ограничить число создаваемых потоков

132
02 марта 2018, 13:58

У меня есть событие, в котором я получаю изменяемое значение. При каждом событии создаю поток и проверяю одной функцией, дошло ли значение до какого-нибудь уровня. Событие возникает каждую секунду, а порой и 2-3 события в секунду. В самой функции я поставил lock. Соответственно, потоки не успевают обрабатывать так быстро и при отладке я увидел, что создано их штук 40. Как можно ограничить создание потоков до 10 там. Ну, или как-нибудь по-другому реализовать задачу?

private void waitTrade(bool isNewBar) 
    {
        lock (lockerTrade)
        {
         .............
        }
    }
Thread th = new Thread(() => waitTrade(false));
th.Start(); // две строчки прописаны в самом событии
Answer 1

Используйте ThreadPool, и добавляйте ему задачи. Вы можете даже выставить вручную максимальное количество потоков методом SetMaxThreads (по умолчанию выставляется значение зависящие от количество ядер процессора).

READ ALSO
Обработать ошибку прерывания потока

Обработать ошибку прерывания потока

После завершения функции f_name на строке label16Invoke(new Action(UpdateLabel)); падает исключение "Поток был прерван, когда находился в состоянии ожидания"

151
OleDbConnectionStringBuilder подключение

OleDbConnectionStringBuilder подключение

Всем привет! Решаю задачу на шарпе (сразу говорю, что знаю базу лишь шарпа)

157
Обновление данных в dataGridView

Обновление данных в dataGridView

ЗдравствуйтеЕсть программа на win формах

155