Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Трубы, потоки, еще потоки...  (Прочитано 5014 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Daniloff
Помогающий

ru
Offline Offline

« : 22-10-2007 09:23 » 

Мучаюсь с NamedPipes.

Программа-сервер открывает pipe и ждет приходящих сообщений. Ждать может дооолго...  Улыбаюсь
На момент ожидания программа оказывается замороженной. А это нежелательно, ибо - окно.
Ладно, вставим pipe в поток. Но как сказать этому потоку, что ожидание закончено?  Жаль Или заморочиться с overlapped?
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 22-10-2007 13:39 » 

Daniloff, а просто прервать работу потока разве нельзя?
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Scorp__)
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 22-10-2007 14:09 » 

Daniloff, приходящие сообщения ожидаются по WaitForSingleObject скорее всего. Так вот Можно просто завести еще одно событие (Event), которое будет выставляться по окончании работы. В потоке сделать WaitForMultipleObjects и если выставилось событие окончания работы - сворачивать поток.

RXL, вроде бы просто прерывать работу потока извне не рекомендуется, мало ли чего поток там навыделял и чего делает, даже функции нет для этого, кроме наглого убийства среди бела дня TerminateThread, но даже в ее описании написано, что "использовать только в случае зависания потока". Лучше всего, на мой взгляд, флаг завершения работы, если поток циклический, или событие, если поток в ожидании, тогда поток сможет завершиться корректно. 
Записан

- А Вы сами-то верите в привидения?
- Конечно, нет, - ответил лектор и медленно растаял в воздухе.
Daniloff
Помогающий

ru
Offline Offline

« Ответ #3 : 22-10-2007 15:36 » 

Scorp__), спасибо, я вспомнил, именно так все и делал! Улыбаюсь
Но сейчас пытаюсь сделать то же самое на C#, а там все по другому Жаль
Вместо WaitForMultipleObjects какие-то system.threading.wait
« Последнее редактирование: 22-10-2007 15:38 от Daniloff » Записан
Scorp__)
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 22-10-2007 20:13 » 

Ну если уж прижмет, то и под .NET когда пишешь можно апишными функциями пользоваться. Улыбаюсь

А вообще system.threading.WaitHanldle и статический метод этого класса WaitAny - вот рецепт для C# и .NET Ага
Записан

- А Вы сами-то верите в привидения?
- Конечно, нет, - ответил лектор и медленно растаял в воздухе.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines