2013-12-11 3 views
1

Я новичок в настольном приложении и вижу, что везде используются нити.Зачем нужен поток

Я не понимаю, почему мы используем его здесь, а не в web-приложениях.

Мы можем напрямую вызывать метод вместо потоков.

+0

Есть ли у вас примеры «повсюду»? –

+0

Вы просматривали код, чтобы узнать, где и почему он создает потоки? – JaredPar

+0

Я использую их много в веб-приложениях, когда они нужны. – StingyJack

ответ

6

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

Обычное приложение для Windows GUI имеет «основной поток», который отвечает за обработку сообщений, полученных от ОС. Эти сообщения используются для взаимодействия с мышью и клавиатурой, поэтому в тот момент, когда вы перестаете обрабатывать их, приложение перестает отвечать на запросы (через несколько секунд сама Windows будет отключена от приложения и поставит «перестать отвечать» в строке заголовка.)

Чтобы избежать этого уродства, люди перемещают действия, которые занимают много времени (либо потому, что им нужно много CPU, либо потому, что они могут ожидать ввода-вывода (диск, сеть и т. Д.)) На другие потоки. Это означает, что основной поток свободен для накачки сообщений.

Вы не запустили основной поток явно - Windows дает его вам, когда приложение запускается.

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

+0

Отличный ответ, я думаю, что стоит упомянуть (или разработать) проблемы, которые может потребовать многопоточность, если вы не будете осторожны. То есть, когда несколько потоков имеют общий ресурс, могут возникать взаимоблокировки и условия гонки. Если у вас есть потоки, ожидающие друг друга, чтобы закончить работу над общим ресурсом, вы сначала побеждаете цель потоки! :) – ryrich

Смежные вопросы