Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.01.2013, 04:16   #1
winhttp
Пользователь
 
Регистрация: 29.07.2012
Сообщений: 98
По умолчанию Грамотное завершение потока, если поток на паузе

Есть отдельный поток, в нем ставлю паузу
Код:
Thread.sleep()
, причем пауза может довольно большой - час и более. При закрытии формы нужно завершить поток, но так, как он на паузе, то процесс висит в диспетчере и ждет завершения паузы и лишь потом завершается.
Пробую завершить процесс через
Код:
Thread.Abort()
Решил через вот эту конструкцию в потоке
Код:
int pause=600000;
Stopwatch taim= new Stopwatch();
taim.Start();
	while (end==0) {
		if (taim.ElapsedMilliseconds>pause){break;}
		Thread.Sleep(100);
		}
Хотел бы посоветоваться у знающих людей - правильное ли решение? или можно как нибудь по другому и более профессионально?
Ах да, Thread.IsBackround не предлагать, я его как заюзал, так программа ложится время от времени, просто поток перестает работать и все
winhttp вне форума Ответить с цитированием
Старый 11.01.2013, 08:49   #2
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Ну я например делал в потоке открытое свойство bool Cancel. и обработчик этого свойства типа "Если истина то на выход"
Хозяйское приложение выставляет нужный флаг в зависимости от своих потребностей.

А в целом... чем вас аборт не устраивает? По идее все ресурсы которые были созданы в форме будут вместе с ней же и уничтожены. Теоретически поток убивается самостоятельн, даже если программер это сделать забыл.
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 11.01.2013, 11:23   #3
Selestis
Форумчанин
 
Аватар для Selestis
 
Регистрация: 21.01.2009
Сообщений: 719
По умолчанию

В принципе можно у потока выставить свойство IsBackground = true, тогда поток станет фоновым и автоматически завершится при уничтожении главных. Только конечно надо проследить, чтобы на момент включения режима sleep или при выключении во время работы фонового потока все ресурсы (если таковые имеются) были освобождены.
Изобретатель велосипедов
Selestis вне форума Ответить с цитированием
Старый 11.01.2013, 12:55   #4
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,120
По умолчанию

winhttp

При закрытии формы нужно завершить поток, но так, как он на паузе, то процесс висит в диспетчере и ждет завершения паузы и лишь потом завершается.

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


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Завершение потока coNsept Общие вопросы C/C++ 3 20.06.2012 19:42
Принудительное завершение потока не работает :(! TEED! Работа с сетью в Delphi 3 06.06.2012 14:34
Работа и корректное завершение потока TThread в любой ситуации... spamer Общие вопросы Delphi 9 03.04.2011 20:27
C# BackgroundWorker - завершение работы потока Lastsummer Помощь студентам 2 16.03.2011 18:04
Как отследить завершение выполнения потока TThread? Трик Общие вопросы Delphi 3 24.10.2007 14:55