программа, не отвечающая на запросы, не завершается изящно, когда ее просят завершить, для тестирования

Я хочу написать простую программу, которая ничего не делает, но не завершает работу по запросу. Я хочу увидеть диалоговое окно Windows, в котором говорится: «Эта программа не отвечает, вы хотите подождать, пока она закончит то, что она делает, или завершить ее сейчас?». После того, как пользователь выберет «завершить это сейчас», он, конечно же, должен выйти.

Причина, по которой я хочу это, - среда тестирования. Я хочу протестировать сценарий, в котором пользователь пытается выйти из системы, но система не сразу выходит из системы из-за не отвечающей программы.

Я попытался ответить на WM_DESTROY, вызвав Sleep(), но, похоже, это не помогло. Программа по-прежнему сразу же завершается, когда ее убивают из диспетчера задач. Опять же, я не пытаюсь написать что-то действительно «неубиваемое», просто простую программу, которая вызывает диалоговое окно с вопросом, хочет ли пользователь дождаться завершения программы.

Большое спасибо за любую помощь.


person Giovanni V    schedule 02.12.2010    source источник
comment
Что вы имеете в виду, когда убили из диспетчера задач? Какие пункты меню или кнопки вы нажимаете? Отредактируйте свой вопрос, чтобы включить эту информацию.   -  person wj32    schedule 02.12.2010


Ответы (1)


Вы можете попробовать изменить цикл основного сообщения. Используйте PeekMessage(...) с NO_REMOVE и игнорируйте сообщения WM_QUIT

РЕДАКТИРОВАТЬ: удалить все сообщения (кроме WM_QUIT) перед их обработкой (GetMessage( &msg ,msg.hWnd ,msg.message ,msg.message ))

person engf-010    schedule 02.12.2010
comment
При чем здесь PM_NOREMOVE? Зачем вам оставлять сообщение о выходе в очереди, если вы намерены его игнорировать? Вы просто будете обрабатывать его снова и снова. - person Ben Voigt; 02.12.2010
comment
@Ben Voigt: избегайте прерывания цикла сообщений! - person engf-010; 02.12.2010