Foros - Stratos

Programadores => General Programadores => Mensaje iniciado por: marcode en 28 de Junio de 2006, 06:25:42 PM

Título: Depurar con DirectInput (desesperante)
Publicado por: marcode en 28 de Junio de 2006, 06:25:42 PM
Me ocurre con cualquier compilador que al depurar mientras se está ejecutando DirectInput, todo se enlentece muchísimo, por lo que es desesperante escribir, manejar el ratón o hacer cualquier cosa. Cuando detengo el programa todo vuelve a la normalidad.

Antes pasaba solo durante los 2 primeros segundos después de llegar al punto de ruptura, pero ahora se queda así todo el rato y necesito solucionarlo porque no puedo depurar, solo alcanzar una opción con el ratón es un suplicio.

¿No le pasa a nadie esto?, a ver si alguien sabe porqué pasa, he probado a fijar el nivel cooperativo del DInput de diferentes maneras y todo sigue igual.
Título: Depurar con DirectInput (desesperante)
Publicado por: Astat en 28 de Junio de 2006, 08:03:33 PM
Me extrañaria mucho que la causa de tu problema fueran las DI. Las he usado desde la version 5 y no me ha pasado nunca eso que cuentas.

Me suena a que puede ser de que en el bucle principal de tu aplicacion no tengas puesto un pequeño Sleep para ceder algo de tiempo al sistema operativo.
Título: Depurar con DirectInput (desesperante)
Publicado por: zupervaca en 28 de Junio de 2006, 09:00:32 PM
¿Cualquier depurador no sera el visual c++ express? por que en ordenadores piii o anteriores la cosa va fatal, las di no tienen nada que ver por que yo las uso y depuro con el visual c++ 2005 .net y va bien.
Título: Depurar con DirectInput (desesperante)
Publicado por: marcode en 28 de Junio de 2006, 09:13:47 PM
Tengo comprobado que es de DInput, porque nunca he tenido este problema cuando no lo he usado, además, he estado investigandolo paso a paso y al iniciarlo empieza a hacer el fallo, voy a intentar solucionar a ver que hago mal.

Lo peor va a ser depurar con el depurador casi bloqueado, es como estar a oscuras y tener que buscar la linterna.

Por cierto en el bucle principal no uso sleep, no creo que sea malo, uso peekmessage, si se recibe un mensaje se despacha, y si no, se ejecuta la aplicación, siempre me fue bien así.
Título: Depurar con DirectInput (desesperante)
Publicado por: marcode en 28 de Junio de 2006, 09:26:15 PM
Cita de: "zupervaca"¿Cualquier depurador no sera el visual c++ express? por que en ordenadores piii o anteriores la cosa va fatal, las di no tienen nada que ver por que yo las uso y depuro con el visual c++ 2005 .net y va bien.

Sí, es el express, pero me pasa también en otros, y no es por falta de velocidad, tengo pc rápido. Es un fallo de bloqueo casi absoluto, con una décima de cada segundo para poder mover un poco el ratón o introducir un carácter, eso sí, lo hace de manera uniforme.

Solo pasa al depurar paso a paso o al alcanzar un break, si se da a continuar fluye normal todo aunque esté en modo debug.
Título: Depurar con DirectInput (desesperante)
Publicado por: Malandrin en 28 de Junio de 2006, 10:03:35 PM
Prueba con:

Inicio/Configuración/Panel de Control/DirectX

En la pestaña de DirectInput marca los 2 checkbox de abajo:

[ ] Emulate Keyboard      [ ] Emulate Mouse

Saludos
Título: Depurar con DirectInput (desesperante)
Publicado por: marcode en 29 de Junio de 2006, 12:05:14 AM
No pude probar lo que me dijiste Malandrín, porque no tengo el sdk instalado.

Pero ya encontre el problema, al parecer es el método de dispositivo de entrada Acquire, que provoca el atasco al depurar, para solucionarlo hay que usar Unacquire.

El problema que tengo ahora es que no sé como "Unacquirirlos" al depurar. Podría situar esa llamada antes de cada breakpoint pero sería una chapuza. ¿hay una solución mejor?.
Título: Depurar con DirectInput (desesperante)
Publicado por: Fanakito en 29 de Junio de 2006, 11:48:15 AM
Yo tengo hago que mi clase raton y mouse funcionen como cajas negras y solo uso DirectInput en release, en debug uso GetAsyncKeyState y GetCursorPos (el API de Win32 vaya)... no se si tal como tienes el codigo estructurado es factible.
Título: Depurar con DirectInput (desesperante)
Publicado por: marcode en 29 de Junio de 2006, 03:20:05 PM
Tengo por costumbre aislar el código, por lo que sí que puedo recibir las entradas de otras formas, si no hay otro remedio haré lo que dices.

De todos modos dejo abierta la pregunta de si se puede hacer una llamada a una función justo antes de que se produzca cualquier parada por breakpoint o paso a paso, o si hay alguna forma de anular el "acquire".

gracias por la ayuda.