Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-05-2020
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 14
aguml Va por buen camino
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:
while(!seguir)
    ::
Sleep(10); 
Y cambiar esa variable a true desde otro hilo ¿Que sería más costoso para la CPU? Supongo que internamente esas funciones harán algo muy parecido ¿No?
Responder Con Cita
  #2  
Antiguo 16-05-2020
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.210
Poder: 22
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
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.
Responder Con Cita
  #3  
Antiguo 16-05-2020
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 14
aguml Va por buen camino
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.
Responder Con Cita
  #4  
Antiguo 17-05-2020
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 14
aguml Va por buen camino
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. 😬
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

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


La franja horaria es GMT +2. Ahora son las 06:44:25.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi