Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Поток самоуничтожается?


Автор: СерегаГоляков 4.4.2011, 10:07
В поток передается ф-я.
Ф-я вычисляется дойдя до своего конца.
ф-я завершается и поток сам уничтожается?
Код

  Thread t = new Thread(WriteY);
    t.Start();            // Выполнить WriteY в новом потоке 

  

Автор: AntonSaburov 4.4.2011, 13:01
Когда gc его обработает - так и уничтожится.

Автор: WolfTheGrey 4.4.2011, 17:19
да, поток заканчивает свою жизнь и попадает в мусорную корзину.
Много людей пытались поток реанимировать, передав ему новые задачи. Но все пытания были тщетны. К тому моменту поток был мертв.

Есть только один способ как законсервировать поток: запустить в нем бесконечный цикл, который прерывается в ожидании новых даных.

Автор: azesmcar 4.4.2011, 17:25
Цитата(WolfTheGrey @  4.4.2011,  17:19 Найти цитируемый пост)
Много людей пытались поток реанимировать, передав ему новые задачи. Но все пытания были тщетны. К тому моменту поток был мертв.

ThreadPool его реанимирует.

Автор: -Mikle- 4.4.2011, 18:20
Цитата(azesmcar @  4.4.2011,  20:25 Найти цитируемый пост)
ThreadPool его реанимирует

Он его не реанимирует, не путайте человека... ThreadPool умеет создавать потоки и держать их в открытом состоянии, пока есть вероятность, что они еще нужны. После простоя потока, он уничтожает его. Подробнее о его работе можно найти в интернете.

Автор: СерегаГоляков 4.4.2011, 20:38
Всем спасибо smile

Автор: azesmcar 4.4.2011, 20:40
Цитата(-Mikle- @  4.4.2011,  18:20 Найти цитируемый пост)
Он его не реанимирует, не путайте человека... ThreadPool умеет создавать потоки и держать их в открытом состоянии, пока есть вероятность, что они еще нужны. После простоя потока, он уничтожает его. Подробнее о его работе можно найти в интернете. 

Цитата(WolfTheGrey @  4.4.2011,  17:19 Найти цитируемый пост)
Много людей пытались поток реанимировать, передав ему новые задачи.

слово "реанимация" здесь была использована в контексте передачи потоку новой задачи. Перефразировать можно так: используйте ThreadPool чтобы избежать оверхэда на ненужное удаление и создание потоков.

Цитата(-Mikle- @  4.4.2011,  18:20 Найти цитируемый пост)
После простоя потока, он уничтожает его.

Не все, количество потоков, равное минимальному всегда остаются в пуле. Уничтожаются по таймауту "лишние".

Автор: WolfTheGrey 5.4.2011, 03:53
А Джеффри Рихтер писал: что Пулами лучше не баловаться. точно не помню почему, а в кратце - они сильно кушают процессорное время.

Автор: azesmcar 5.4.2011, 08:10
Цитата(WolfTheGrey @  5.4.2011,  03:53 Найти цитируемый пост)
А Джеффри Рихтер писал: что Пулами лучше не баловаться. точно не помню почему, а в кратце - они сильно кушают процессорное время. 

Это где же он такое писал? Прошу цитату.

Цитата(CLR via C#)

In this section, I will show you how to create a thread and have it perform an asynchronous
compute-bound operation. While I am going to walk you through this, I highly recommend
that you avoid the technique I show you here. Instead, you should use the CLR’s thread pool
to execute asynchronous compute-bound operations whenever possible
, and I go into the
details about doing this in Chapter 26, “Compute-Bound Asynchronous Operations.”

However, there are some occasions when you might want to explicitly create a thread dedicated
to executing a particular compute-bound operation. Typically, you’d want to create a
dedicated thread if you’re going to execute code that requires the thread to be in a particular
state that is not normal for a thread pool thread. For example, explicitly create your own
thread if any of the following is true:

Автор: -Mikle- 5.4.2011, 10:07
Цитата(azesmcar @  4.4.2011,  23:40 Найти цитируемый пост)
слово "реанимация" здесь была использована в контексте передачи потоку новой задачи

А, видимо я не понял. Согласен тогда конечно, сорри.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)