Потоки (thread)

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Потоки (thread)

Сообщение Ramzes » 22.06.2006 (Чт) 11:51

Я знаю несколько способов начать что-то выполнять в новом потоке:
1) Один из самых простых, использование "пула потоков" (ThreadPool).
2) Создавать новый поток руками.
3) (Читал в книге, но лично не увидел разницы, что в параллельном, что в одном потоке) BackgroundWorker.
4) Вызвать метод BeginInvoke у делегата.

(может в чем ошибся, поправьте меня, но про 3 и 4 я читал в книге, 4 вообще еще не юзал)
Вопросы:
1) При использовании BackgroundWorker прорисовка формы все равно жуть как тормозит! а точнее вообще ни на что не реагирует! Такое ощущение, что я запускаю тяжкое действие в текущем потоке формы. Так и должно быть? Если нет, тогда можно рабочий код? (заранее спасибо)
2) При использовании пула потоков, если задача, которая работает в параллельном потоке очень ресурсоемкая, отрисовка формы, мягко говоря, тоже не спешит работать. Так и должно быть? Если нет, тогда можно рабочий код? (заранее спасибо). Если же задача не ресурсоемкая, то все работает нормально.

Итого: Я знаю один способ, который действительно работает безотказно: создавать потоки ручками.

Dmitriy Solomnikov
Постоялец
Постоялец
 
Сообщения: 407
Зарегистрирован: 10.11.2004 (Ср) 13:04
Откуда: Москва

Сообщение Dmitriy Solomnikov » 22.06.2006 (Чт) 18:07

1). Пул потоков советую создавать, когда надо делать много параллельных действий. Не могу сказать как там обстоят дела с приоритетом - небыло необходимости его менять.

2). Если ситуация такова, что есть одна форма и и надо выполнить длительное тяжелое действие, то ...я обычно запускаю для него (действия) отдельный поток, в котором оно выполняется и как следствие не имею никаких проблем с отрисовкой интерфейса. Кстати можно еще снизить приоритет рабочего потока (для красоты), чтоб другим не мешал.

3). А ссылка на книгу есть? Тоже почитал бы :D :D :D

4). Смысла не вижу - проще поток создать и не париться с результатом (AsyncResult).

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 22.06.2006 (Чт) 18:19

Dmitriy Solomnikov писал(а):2). Если ситуация такова, что есть одна форма и и надо выполнить длительное тяжелое действие, то ...я обычно запускаю для него (действия) отдельный поток, в котором оно выполняется и как следствие не имею никаких проблем с отрисовкой интерфейса. Кстати можно еще снизить приоритет рабочего потока (для красоты), чтоб другим не мешал.

Я вообще-то тоже так делаю, но если я поток создаю пулом потоков или использую BacgroundWorker то не заметно, что действие выполняется в отдельном потоке. прочитай еще раз внимательно мой предидущий пост

насчет книги: Она у меня в "бумажном" варианте.

AGGRESSOR
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 21
Зарегистрирован: 13.10.2005 (Чт) 10:09
Откуда: Мурманск

Сообщение AGGRESSOR » 27.06.2006 (Вт) 10:43

а я бы все равно с удовольствием глянул на какой-нибудь рабочий код ... например на
Создавать новый поток руками
или на
запускаю для него (действия) отдельный поток, в котором оно выполняется и как следствие не имею никаких проблем с отрисовкой интерфейса
...в целях расширения кругозора и поднятия уровня знаний :)


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 94

    TopList