2014-10-22 10 views
1

Я занимаюсь разработкой приложения, которое будет работать на безголовом устройстве Windows CE 6.0. Идея состоит в том, чтобы создать приложение, которое будет запущено при запуске и запускается до выключения. (В основном это будет выглядеть как услуга, но приложение легче отлаживать без полной стычки для остановки/развертывания/запуска/присоединения к процедуре процесса)Последствия вызова WSACleanup

Моя забота о том, что произойдет во время разработки. Если я отлаживаю/развертываю приложение, я не вижу возможности закрыть его дружелюбным и простым способом. (Не стесняйтесь предлагать, если это можно сделать лучше/удобнее для пользователя). Я просто остановлю отладчик, и результат будет вызван WSACleanup.

Теперь вопрос. Что является следствием не вызова WSACleanup? Смогу ли я снова запустить и запустить приложение winsock с помощью отладчика? Или будет утечка ресурса, препятствующая мне сделать это?

Спасибо заранее, Джеф

+1

Я не знаком с Winsock в частности, но это общее правило API Windows, что ресурсы не просачиваются, когда процесс завершается без очистки. Вполне возможно, что будут некоторые различия в поведении, например, соединения могут оставаться открытыми до тех пор, пока время ожидания не исчезнет, ​​сокеты для прослушивания могут не стать доступными снова так же быстро, как в противном случае, и что-то подобное. Ничего серьезного, но может быть несколько неприятностей. Во всяком случае, вам будет удобно экспериментировать и посмотреть, работает ли это для вас или нет. –

+0

Я тоже думал об экспериментировании, но это не обязательно приводит к полному пониманию системы. Я думаю, вы совершенно правы в отношении ресурсов. Я не знал, что ОС очищает беспорядок, который вы оставляете. Я знал о выделенной памяти, но не о других ресурсах. Когда вы ответите в ответ, я еще раз посмотрел и обыскал специально для «сокетов». Я нашел [это] (http://superuser.com/questions/375604/does-windows-take-care-of-closing-sockets-when-processes-exit), который в основном подтверждает ваш ответ. Как я могу пометить ваш комментарий в качестве ответа? –

ответ

0

Я думаю, что Гарри Джонстон комментарий является правильным. Даже если ваше приложение не имеет пользовательского интерфейса, вы можете найти способ его грамотно закрыть. Я полагаю, что у вас есть один или несколько потоков в циклах, вы можете добавить именованное событие ручного сброса, которое проверяется (или может использоваться для ожидания вместо Sleep()) внутри условия цикла и создает небольшое приложение, которое открывает событие, используя одно и то же имя, устанавливает его и завершает работу. Это заставит ваше приложение-сервис закрыть. Возможно, это не понадобится для отладки, но может быть полезно также, если вам потребуется обновить программное обеспечение, и это требует, чтобы ваш основной сервис не работал.

+0

Спасибо за упоминание процесса обновления. Я еще об этом не думал. Ваша идея звучит как хорошая отправная точка. –