OfficalCodexPH Ответов: 2

Как уменьшить использование процессора при использовании потока в VB.NET


привет по какой-то причине, когда я использую поток, моя загрузка процессора очень высока, и мне было интересно, как я могу ее уменьшить. Вот мой код, чтобы начать его
Dim myThread As New Thread(AddressOf TimerStart)
           myThread.IsBackground = True
           myThread.Start()

а также как бы я остановил поток, не используя thread.abort, как я слышал, это зло, но мне это нужно по щелчку кнопки. Так как же все это будет работать? заранее спасибо.

Что я уже пробовал:

я огляделся вокруг, нашел несколько вещей на переполнении стека и на самом деле не нашел ничего, что работает для меня.

2 Ответов

Рейтинг:
9

CPallini

Цитата:
а также как бы я остановил поток, не используя thread.abort, как я слышал, это зло, но мне это нужно по щелчку кнопки
Видеть Изящное Завершение Работы Рабочих Потоков[^], это так C#, но вы могли бы легко адаптировать его к VB.NET (КСТАТИ C# lock является SyncLock в VB.NET).


OfficalCodexPH

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

Рейтинг:
19

OriginalGriff

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

Поэтому, если ваш поток использует значительные ресурсы процессора, вам нужно внимательно посмотреть, какой код он выполняет: это то, что использует процессор, и мы этого не видим! Начните с вашего TimerStart код и посмотреть, что он делает.


OfficalCodexPH

ладно чувак я сейчас посмотрю спасибо чувак.

OriginalGriff

Всегда пожалуйста!

OfficalCodexPH

чувак, ты знаешь, что сказал, Если поток был прерван ЭСТ ну а что, если бы я хотел, чтобы пользователь нажал кнопку остановки, как бы он немедленно остановил поток, просто нажав кнопку остановки? Жаль, что вопрос мой многопоточность инст лучших :-)

OriginalGriff

В принципе, они не могут.
Они могут - нить может быть прервана, но это все равно, что потянуть за аварийный шнур в поезде: он останавливается мертвым, и все разбрасываются. Когда вы прерываете поток, все, что он делает, убивается - и это означает, что файлы не закрываются должным образом, данные отбрасываются и т. д. И если он взял замок, то этот замок не освобождается, так что все остальное, что хочет его, висит навсегда. Это самое последнее средство.

Вместо этого вы используете переменную, которая говорит потоку остановиться - он часто проверяет ее, и когда он находит запрос на остановку, он изящно завершает работу. Насколько быстро это произойдет, зависит от того, как часто ваш код проверяет переменную!

OfficalCodexPH

о'Кей, чувак, спасибо за помощь, теперь я понимаю, что ты имеешь в виду. :-)