Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 7 
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Всем привет!

У меня в приложении много потоков, причем имеют они разные приоритеты. Так вот есть среди них поток с самым низким приоритетом. Не смотря на это, он отбирает все рессурсы процесса и выполняется один. При этом ни один из потоков процесса не может выполниться пока этот поток не закончит. И самое инетересное в том что сам поток занимает максимум 1% процессорного времени и все равно паралельно с ним не может выполняться ни один поток приложения. Приложение написано на C#.

Какие будут соображения?
Заранее спасибо!



Партнер
 

Advanced member
Статус: Не в сети
Регистрация: 09.06.2003
Откуда: USSR
Ну а какие могут быть соображение если ты даже не написал примерно чем твой поток вообще занимается то?
Может ты там вытворяеш ужасные вещи :)


 

Member
Статус: Не в сети
Регистрация: 23.09.2003
Откуда: South Ural
самый низкий это случаем не idle?
а не обрабатывает ли этот поток случаем события от интерфейса программы?

_________________
http://stargaz0r.nm.ru
http://people.overclockers.ru/StarGaz0r/files


 

Advanced member
Статус: Не в сети
Регистрация: 09.06.2003
Откуда: USSR
Ну или скажем, ты мог в потоке в цикле делать бесконечное вычисление, так у тебя пусть хоть IDLE стоит все равно пока не отработает все остальные зависнут. Поток вообще хорошо применять не для массивного вычисления или любого другого действия, а скажем для какого либо ожидания событие или одноразового прохода . Это всеже не отдельаная программа, а отдельный поток в программе и он запросто может подвесить и основной поток. Сам несколько раз нарывался на такое. Вот у меня в АТТ висят пара потоков, которые ожидают события через WaitforSingleObject/WaitForMultipleObjects. от хуков или драйверов, в этом режиме поток вообще ничего не делает.


 

Поток работает с библиотекой, которая управляет определенным внешним устройством. Конечно же поток обрабатывает действия интерфейсного потока, вернее главный поток говорит когда ему работать. Здесь очевидно криво написанные дрова. Однако исправлять дрова нет возможности, я их не писал. Потому решение в том чтобы правильно распределить процессорное время между потоками процесса. Насколько я понимаю приоритет idle устанавливается для процессов, а не потоков. Поток же имеет самый низкий приоритет.


 

Advanced member
Статус: Не в сети
Регистрация: 10.04.2003
Откуда: Москва
Zhoma, твоя ситуация похожа на взаимную блокировку потоков.
Т.е. более шустрые потоки хотят выполняться, но IDLE thread им не дает. Может ты вызываешь сервис или пользуешься данными, у которых свойство 'только один поток'?
Кол-во тэдов не важно, у меня в S&M их 12 болтается, причем с равным приоритетом - не в количестве зло.
конечно, если я правильно понял вопрос
Код:
 invoke SetPriorityClass,hProcess,IDLE_PRIORITY_CLASS   
 invoke SetThreadPriority,hThread,THREAD_PRIORITY_IDLE   


 

Потоки пересекаются данными, но блокировки при этом не происходит, они выполняются параллельно. Установлены семафоры, работу котоых я неоднакратно проверял. А вот что означает код я так до конца и не понял.


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 7 
-

Часовой пояс: UTC + 3 часа


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

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan