![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
Stratus |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 27.5.2009 Репутация: нет Всего: нет |
Коллеги, подскажите как запустить поток после его остановки,
или запустить его повторно... В следующем коде необходимо после остановки потока запустить его заново...
|
|||
|
||||
vlsaf |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 423 Регистрация: 9.5.2007 Репутация: нет Всего: 1 |
После остановки потока, его повторно уже не запустить.
Делай эмуляцию остановки. Поток должен перейти как бы в режим ожидания. Пусть анализирует некий флаг. Если он ложь, то ждем, если истина выполняемся. А вот когда программа закончивает свою работу, тогда и делай стоп птоку. |
|||
|
||||
Stratus |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 27.5.2009 Репутация: нет Всего: нет |
Так вот я как раз и не знаю как перевести его в режим ожидания....
|
|||
|
||||
vlsaf |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 423 Регистрация: 9.5.2007 Репутация: нет Всего: 1 |
самый понятный способ ( но не самый правильный) это зациклить
while(!flag) { thread.Sleep(20); } В этом случае если флаг ложь, то крутимся внутри цикла. Истина - выходим из него переменная flag внешня и управляется твоими кнопками. Как это осмыслишь., можно пойти дальше и впустую не нагружать процессор в цикле, а просто ожидать. Как это сделать - вопрос второй. Тебе же пока для начала нужно сделать ожидание, хотя бы таким тупым способом. Это сообщение отредактировал(а) vlsaf - 30.5.2011, 10:23 |
|||
|
||||
Stratus |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 27.5.2009 Репутация: нет Всего: нет |
К сожалению вариант со Sleep не подойдет, для меня 20мс это уже критично.
Нужен более продвинутый способ. Думаю вариант со Sleep в данном примере работать не будет или будет некорректно. Как только программа войдет в цикл в главном потоке она сразу "завесит" программу и внешним флагом её уже не остановишь или надо будет успеть нажать кнопку в перерыве между 20 мсек. Это сообщение отредактировал(а) Stratus - 30.5.2011, 12:22 |
|||
|
||||
Stratus |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 27.5.2009 Репутация: нет Всего: нет |
Думаю что нужно думать в направлении перевода потока в режим ожидания и последующего его пробуждения,
или убивания потока и создание нового потока при повторном старте. Какие будут идеи на этот счет? |
|||
|
||||
Alca |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3993 Регистрация: 14.6.2006 Репутация: нет Всего: 50 |
Используй ивенты и Wait-функции Это сообщение отредактировал(а) Alca - 30.5.2011, 18:38 |
|||
|
||||
Stratus |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 27.5.2009 Репутация: нет Всего: нет |
||||
|
||||
Alca |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3993 Регистрация: 14.6.2006 Репутация: нет Всего: 50 |
Могу на плюсах, т.к. шарп не курю.
|
|||
|
||||
jonie |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 6 Всего: 118 |
да на плюсах тоже самое будет по сути своей... Это сообщение отредактировал(а) jonie - 30.5.2011, 20:45 -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
||||
|
|||||
vlsaf |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 423 Регистрация: 9.5.2007 Репутация: нет Всего: 1 |
Ну кто же тебе сказал, что sleep должен идти в главном потоке? В главном потоке создаешь другой фоновый поток, который должен засыпать и просыпаться. Запускаешь его из главного. И будет тебе счастье. В главном потоке (UI поток программы) только меняешь переменную flag. А фоновый поток уже будет смотреть на этот флаг. Подвисоны теоретически не возможны. Про WaitOne() хотел сказать позже ![]() Это сообщение отредактировал(а) vlsaf - 31.5.2011, 15:20 |
|||
|
||||
Alca |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3993 Регистрация: 14.6.2006 Репутация: нет Всего: 50 |
||||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 2 Всего: 211 |
Используй ThreadPool.
|
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | .NET для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |