![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
||||
|
||||
|
Dudas sobre WaitFor, WaitForSingleObject y WaitForMultipleObjects
Mi duda es muy simple ¿Que hacen internamente? Si se pudiera evitar usarlos y usar algo como:
Código PHP:
|
|
#2
|
||||
|
||||
|
Sleep tiene alguna desventaja frente a las APIs de espera. Sleep no responde a eventos por lo que hasta que no se cumpla el tiempo de suspensión, no recuperas el control. Cuando termina el tiempo, el control no es devuelto inmediatamente. Si pones tiempos cortos, el mismo bucle consume recursos y aún poniendo un tiempo de Cero, el control no lo obtendrás inmediatamente y el bucle será muy ineficiente.
Para controlar hilos lo recomendable los las API de espera que están enfocadas a eventos y en general serán más eficientes, pero si las metes en un bucle con tiempo máximo de espera muy corto, ese bucle puede repetirse demasiadas veces con lo que pierdes eficiencia, pues cada llamada Wait.. consume un tiempo de CPU. Saludos. |
|
#3
|
||||
|
||||
|
O sea la duda era porque tengo un botón que es Pause que acabará llamando a DbgBreakpoint que detendrá el hilo del depurador y la idea era o usar un TEvent y un WaitFor con tiempo infinito cuando se cumpla esa excepción concreta, o usar un bucle a la espera de que una variable cambie a modo de flag.
Otra cuestión sería suspender el hilo del depurador y cuando le dé a Terminate revivirlo pero no sé si eso dejaría suspendido también al evento depurado o solo al depurador y dejaría al depurado sin control para los breakpoints y demás que haya puesto. No sé que debería elegir. |
|
#4
|
||||
|
||||
|
Lo he solucionado con un TEvent y un bool. Cuando llamo al método Pause pongo una ariable llamada Paused a true y luego llamo a DbgBreakPoint y en la excepción que controla esa llamada puse con condicional que comprueba que Paused es true y si es así dentro llamo al método del evento WaitFor y justo después tengo un Paused=false. Cuando llamo al método Continue dentro tengo la llamada al método SetEvent y listo. Luego me aseguré de poner la llamada a Continúe en los métodos Terminate y Detach de mi clase para terminar el hilo.
Funciona de 10. 😬 |
![]() |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Porque WaitForMultipleObjects bloquea mi aplicacion y otras funciones? | JuanErasmo | C++ Builder | 2 | 09-12-2009 08:53:28 |
| WaitForSingleObject se queda bloqueada | seoane | API de Windows | 3 | 12-03-2008 23:59:14 |
| uso del WaitFor() en Threads | chalitox | Varios | 7 | 06-09-2006 23:34:56 |
| uso de WaitForSingleObject para hacer un instalador | crievep | Varios | 5 | 05-04-2006 02:05:35 |
|