se están visualizando los mensajes de Windows con servicio de diálogo mientras afirman?

StackOverflow https://stackoverflow.com/questions/1454058

  •  12-09-2019
  •  | 
  •  

Pregunta

Tengo una aplicación MFC que genera un número de diferentes subprocesos de trabajo y se compila con VS2003.

Cuando se llama a CTreeCtrl :: GetItemState () Estoy en ocasiones conseguir un emergente de diálogo de depuración afirmación. Estoy suponiendo que esto se debe a que he pasado en un identificador de un elemento no válido, pero esto no es mi preocupación inmediata.

Mi preocupación es: A partir de los registros de mi, parece que el hilo MFC continúa dando servicio a una serie de mensajes de ventanas mientras se visualiza el diálogo de aserción. Pensé que el diálogo modal afirman fue así que me preguntaba si esto era posible?

¿Fue útil?

Solución

El cuadro de mensaje que muestra el error de aserción tiene un suministro de mensajes para sus propios fines. Pero va a despachar todos los mensajes que vienen en, no sólo los del cuadro de mensaje (de lo contrario las cosas podrían ser bloqueados).

Con un diálogo modal normal, esto no es un problema porque la ventana padre está desactivada normalmente durante la duración del diálogo.

El código que abre el diálogo afirmación debió no pudo averiguar la ventana padre, por lo que no se ha desactivado. Esto puede suceder si la ventana principal no es la ventana activa en el momento de la afirmación. Otras cosas pueden ir mal también.

Puede cambiar la forma de Visual Studio fracasos informes de la biblioteca de aserción de tiempo de ejecución C con _CrtSetReportMode . Puede hacer que se detenga en el depurador y / o ingrese a la ventana de salida en lugar de tratar de mostrar el cuadro de diálogo.

Otros consejos

Diálogos (incluso un cuadro de mensaje) necesitan para bombear la cola de mensajes, incluso si son modal. De lo contrario, ¿cómo iban a saber que ha hecho clic en el botón "OK"?

Si tiene que parar todo cuando una aserción desencadena normalmente no es demasiado difícil de escribir su propia implementación de assert() (o ASSERT() o lo que sea) que va a entrar en el depurador en lugar de mostrar un cuadro de mensaje que le pregunta si desea entrar en el depurador (tal vez sólo si se determina que el depurador se adjunta).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top