Visual Basic - TENGO UN PROBLEMA

Life is soft - evento anual de software empresarial
 
Vista:

TENGO UN PROBLEMA

Publicado por Adrian (4 intervenciones) el 22/02/2010 12:13:28
He posteado varias cosas aquí y me han sabido ayudar bastante bien. Aquí va una buena consulta. Estoy programando un juego de cartas estilo MAgic en Visual Basic 6 y me ha surgido un problema que no se como resolver. Todo funciona correctamente pero me encuentro el pollo cuando paso el turno al ordenador. La IA realiza diferentes jugadas, algunas de ellas activan movimiento en controles. El problema me lo encuentro en esto...: 1-Que instruccion, funcion o procedimiento puedo utilizar para dar "pausas" entre las jugadas de la IA pero que no me anulen el movimiento de los controles? es decir, la IA hace X jugada, activa la animacion de un control y poder darle una pausa pero solo a la ejecución lineal de comandos y no una pausa total. He utilizado Pause, funciones tipo "Espera", pero claro, se queda toda la ejecución en espera o pausa, con lo cual estoy en lo mismo. Mi pregunta clara es: como puedo darle pausas en la ejecución del código pero no del programa total? A ver si alguien me puede ayudar.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:TENGO UN PROBLEMA

Publicado por Antoni Masana (4 intervenciones) el 22/02/2010 13:07:39
Pausa de un segundo

Tmp=timer+1
while Tmp > Timer
DoEvents
wend

----------- Sacado de Microsoft ----------------------------------------------------------

La función DoEvents surrenders ejecución de la macro para que el sistema operativo pueda procesar otros eventos. La función DoEvents pasa el control de la aplicación en el sistema operativo. Algunos casos en que puede resultar útil DoEvents incluyen:

- E/s de hardware
- Bucles de retraso
- Llamadas de sistema operativo
- Interbloqueo de DDE

En este artículo también se describe los posibles problemas asociados con la función DoEvents.

==> E/s de hardware

Si el código espera una entrada desde cualquier dispositivo de E/s, la función DoEvents acelera la aplicación por multitarea. Como resultado, el equipo no parece pausar o dejar de responder (se bloquea) mientras se ejecuta el código.

Ejemplo:
Open "com1" For Input As #1
Input #1, x
Do Until x = Chr(13)
DoEvents
'...
'...
Input #1, x
Loop


==> Bucles de retraso

En un bucle de retardo, la función DoEvents puede permitir al sistema de operativo de CPU continuar con los trabajos pendientes.

Ejemplo:
X = Timer()
Do While X + 10 > Timer()

DoEvents

Loop


==> Llamadas de sistema operativo

Cuando Visual Basic llama el sistema operativo, el sistema operativo puede devolver el control incluso antes de procesar completamente el comando. Si lo hace, puede impedir que cualquier código de macro que depende de un objeto generado por la llamada de ejecución. En el ejemplo siguiente, la función Shell inicia la aplicación Microsoft Word. Si Word no está todavía abierto, cualquier esfuerzo de establecer un vínculo DDE con el detendrá el código. Mediante el uso de DoEvents, el procedimiento asegura que una operación, como la shell, se ejecuta completamente antes de procesa la siguiente instrucción de macro.

Ejemplo:
z% = Shell("WinWord Source.Doc",1)
DoEvents
...
...


==> Interbloqueo de DDE

Considere una situación en que una macro de Visual Basic llama a una aplicación que está esperando una segunda aplicación obtener algunos datos. Si la macro no le otorga control la segunda aplicación, el resultado es un interbloqueo. En las conversaciones DDE entre varias aplicaciones, utilice DoEvents quita la posibilidad de este tipo de interbloqueos.

==> Problemas asociados a DoEvents

Con demasiadas instrucciones DoEvents anidadas, se puede agotar el espacio de pila y, por lo tanto, generar un mensaje de error "Out of Stack Space". Este error se refiere al espacio de pila de la aplicación asignado a la aplicación Microsoft Excel.

Asegúrese de que el procedimiento que ha proporcionado el control de DoEvents no se ejecuta nuevo de una parte diferente del código antes de la primera llamada a DoEvents devuelve; Esto puede provocar resultados imprevisibles.

Una vez DoEvents renuncia control al sistema operativo, no es posible determinar cuando Microsoft Excel se reanudará el control. Después de que el sistema operativo Obtiene el control del procesador, procesará todos los eventos pendientes que están actualmente en la cola de mensajes (como clics del mouse (ratón) y pulsaciones de teclas). Esto puede ser inadecuado para algunas aplicaciones de adquisición de datos en tiempo real.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:TENGO UN PROBLEMA

Publicado por Adrian (4 intervenciones) el 22/02/2010 16:03:26
No he acabado de entender lo que me has puesto. Entiendo el Do Events, pero me esto ya lo he probado y sigue pasandome lo mismo. Alguna otra sugerencia??
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar