![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| NiJazz |
|
|||
![]() Jazz coder ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2286 Регистрация: 10.8.2003 Где: Москва Репутация: 6 Всего: 23 |
У меня такая ситуация. Есть два приложения: сервер и клиент. Общаются по Named Pipe. Когда клиент готов к отправке данных, он вызывает SetEvent и сервер переходит к вызову CreateNamedPipe. Сервер работает постоянно. Основная загвоздка заключается в том, что нужно, чтобы пока от клиента нет событий, то есть пока сервер ждёт, он выполнял какое-то действие, например, постоянно что-то писал в файл. Как только событие возникает, сервер прекращает работать с файлом и переходит к "общению" с клиентом.
Я так понял, что когда клиент умолкает, сервер запускает функцию, в которой в бесконечном цикле идёт работа с файлом. Но как остановить эту функцию? Здесь помогут функции CreateThread и TerminateThread? Спасибо. |
|||
|
||||
| Step |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5151 Регистрация: 26.9.2002 Где: дурдом.UA Репутация: нет Всего: 25 |
поставьте в цикл WaitForSingleObject с пердварительной инвертацией
т.е. что бы она переходила в режим ожидания когда событие есть а не наоборот -------------------- - Дурак учится на своих ошибках, умный на чужих. - умные учатся у дураков |
|||
|
||||
| NiJazz |
|
|||
![]() Jazz coder ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2286 Регистрация: 10.8.2003 Где: Москва Репутация: 6 Всего: 23 |
Step
Это как сделать? То есть чтобы программа не висела при вызове WaitForSingleObject? |
|||
|
||||
| Mad |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Эксперт Сообщений: 656 Регистрация: 18.10.2004 Где: Одесса Репутация: 2 Всего: 19 |
NiJazz
Можно вызывать WaitForSingleObject с таймаутом 0, тогда он будет просто проверять установлен ли эвент. Но правильней будет через потоки. |
|||
|
||||
| bel_nikita |
|
||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: 4 Всего: 47 |
Может стоит два треда организовать. Вот, абстракция такая залетела в голову: класс потока
абстрактный класс двух активных потоков:
типа, наглядный пример использования:
Вот, такой, простенький, пример мне залетел в голову. Можно конечно и лучше придумать. А нужно ли мудрить? Это сообщение отредактировал(а) bel_nikita - 4.11.2004, 00:50 |
||||||||
|
|||||||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 2 Всего: 110 |
может, попробовать такое?
так даже Event не надо -------------------- qqq |
|||
|
||||
| NiJazz |
|
|||
![]() Jazz coder ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2286 Регистрация: 10.8.2003 Где: Москва Репутация: 6 Всего: 23 |
maxim1000
На первый взгляд, вполне просто наглядно, но не хотелось бы иметь канал открытым, пока нет "событий" от клиента. |
|||
|
||||
| bel_nikita |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: 4 Всего: 47 |
maxim1000
Так, оно процессор загрузит на 100%. У меня при работе с COM портом, подобный пример грузит проц на 97%. Но как торлько перешел на тред с ожиданием события, точнее с автоматическим срабатывание, загрузка проца уменьшилась до 0% NiJazz
|
||||||
|
|||||||
| maxim1000 |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 2 Всего: 110 |
оно грузит процессор настолько, насколько его грузят две альтернативные части программы другое дело, что если притормозит одна из них, то притормозит и вторая - это минус...
а что здесь такого? Добавлено @ 12:24 еще можно попробовать асинхронный режим функции ReadFile Добавлено @ 12:25 (это, когда даешь команду "начать чтение", а потом тебе сообщают (возможно, с помощью Event), когда оно закончилось -------------------- qqq |
||||
|
|||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |