Как я могу гарантировать быстрое завершение работы моего приложения win32? - PullRequest
7 голосов
/ 16 октября 2008

У меня есть приложение C32 Win32, в котором есть несколько потоков, которые могут быть заняты выполнением операций ввода-вывода (HTTP-вызовы и т. Д.), Когда пользователь хочет закрыть приложение. В настоящее время я играю хорошо и жду окончания всех потоков, прежде чем вернуться из main. Иногда это занимает больше времени, чем мне бы хотелось, и, действительно, кажется бессмысленным заставлять пользователя ждать, когда я смогу просто выйти. Однако, если я просто вернусь и вернусь с main, я, скорее всего, получу сбои, когда деструкторы начнут вызываться, пока еще есть потоки, использующие объекты.

Итак, признавая, что в идеальном платоническом мире добродетели лучше всего подождать, пока все потоки выйдут, а затем аккуратно завершить работу, каково будет следующее лучшее решение в реальном мире? Простое ускорение выхода из потоков может быть невозможным. Цель состоит в том, чтобы как можно быстрее остановить процесс, чтобы, например, поверх него можно было установить новую версию. Единственный дисковый ввод-вывод, который я делаю, находится в транзакционной базе данных, так что я не очень беспокоюсь о том, чтобы надеть на него пробку.

Ответы [ 11 ]

0 голосов
/ 16 октября 2008

Поручите пользователю отключить компьютер от сети. Если не считать этого, вы должны отказаться от своей асинхронной деятельности на ветер. Или это ХВИНД? Я никогда не могу вспомнить в C ++. Конечно, вы можете выбрать среднюю дорогу и быстро указать в текстовом файле или указать, какое действие было прервано, чтобы при следующем запуске программы оно могло автоматически выполнить это действие снова или спросить пользователя, хотят ли они это сделать. В зависимости от того, какие данные вы потеряете при отказе от асинхронного действия, вы не сможете сделать это. Если вы взаимодействуете с пользователем, возможно, вы захотите рассмотреть диалог или какое-либо взаимодействие с пользовательским интерфейсом, которое объясняет, почему это занимает так много времени.

Лично я предпочитаю инструкцию для пользователя, чтобы просто отключить компьютер. :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...