Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Depurar con DirectInput (desesperante)

Iniciado por marcode, 28 de Junio de 2006, 06:25:42 PM

« anterior - próximo »

marcode

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.
size=9]afortunadamente siempre ha habido alguien dispuesto a reinventar la rueda, de lo contrario seguiríamos usando un disco de piedra con un agujero.[/size]

Astat

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.

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.

marcode

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í.
size=9]afortunadamente siempre ha habido alguien dispuesto a reinventar la rueda, de lo contrario seguiríamos usando un disco de piedra con un agujero.[/size]

marcode

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.
size=9]afortunadamente siempre ha habido alguien dispuesto a reinventar la rueda, de lo contrario seguiríamos usando un disco de piedra con un agujero.[/size]

Malandrin

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

marcode

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?.
size=9]afortunadamente siempre ha habido alguien dispuesto a reinventar la rueda, de lo contrario seguiríamos usando un disco de piedra con un agujero.[/size]

Fanakito

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.

marcode

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.
size=9]afortunadamente siempre ha habido alguien dispuesto a reinventar la rueda, de lo contrario seguiríamos usando un disco de piedra con un agujero.[/size]






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.