Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-02-2021
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 11
aguml Va por buen camino
Lanzar 4 hilos simultáneos y esperarlos

Buenas amigos, tengo una aplicación que tiene 4 bucles que me congelan la aplicación y quiero meter cada bucle en un hilo para que trabajen simultáneos pero el problema es que necesito saber si alguno de los 4 bucles sale con false para si es así mostrar un mensaje de error y terminar los otros. La cosa es que me encuentro con varios problemas, lo primero es que si lanzo los 4 y espero con WaitForMultipleObjects ¿Como hago para desde un hilo detener al resto de hilos? ¿Algún ejemplo al respecto? Otra duda es que cada hilo debería incrementar un contador común para los 4 y supongo que para eso hay que usar semáforos o algo así pero no tengo ni idea de cómo hacer eso y se me ocurrió que como tengo un TProgressBar al que le puse el rango de 0 a 4 para que cada vez que termine un bucle incremente la barra y me preguntaba si sería suficiente con hacer eso desde los 4 hilos usando Synchronize o si al hacer eso desde los 4 hilos podría darme algún problema.
Responder Con Cita
  #2  
Antiguo 26-02-2021
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.265
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por aguml Ver Mensaje
tengo una aplicación que tiene 4 bucles que me congelan la aplicación y quiero meter cada bucle en un hilo para que trabajen simultáneos pero el problema es que necesito saber si alguno de los 4 bucles sale con false para si es así mostrar un mensaje de error y terminar los otros.
Lo primero es saber lo que "usan" esos bucles para saber si los puedes meter en un hilo (Bases de Datos, controles visuales,...). O si te costará más o menos.

Cita:
Empezado por aguml Ver Mensaje
¿Como hago para desde un hilo detener al resto de hilos? ¿Algún ejemplo al respecto?
Revisa el procedimiento Terminate y el evento asociado.
Si lo usas correctamente, creo que puedes controlar lo que necesitas.
También revisa el WaitFor para lo contrario (tal vez en algun caso debes tener algo esperando hasta que consigas finalizarlos todos).

Cita:
Empezado por aguml Ver Mensaje
Otra duda es que cada hilo debería incrementar un contador común para los 4 y supongo que para eso hay que usar semáforos o algo así pero no tengo ni idea de cómo hacer eso y se me ocurrió que como tengo un TProgressBar al que le puse el rango de 0 a 4 para que cada vez que termine un bucle incremente la barra y me preguntaba si sería suficiente con hacer eso desde los 4 hilos usando Synchronize o si al hacer eso desde los 4 hilos podría darme algún problema.
No entiendo lo de incrementar un contador. Si realmente lo necesitas (para saber cuantos han acabado) o quieres hacerlo con un Progressbar, puedes hacerlo sin problemas utilizando Synchronize. En ambos casos se considera un recurso compoartido y debes modificarlo en exclusión. Lo dicho, para eso el Synchronizees suficiente.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 26-02-2021
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 11
aguml Va por buen camino
Ya lo conseguí. Me explico, la idea es que una tarea de fuerza bruta la partí en 4 trozos para dividir el proceso, entonces si uno de los hilos tiene éxito avisar al resto para que terminen la búsqueda. Como eran 4 do while lo que hice fue crear una variable bool y usarla como condición de salida para los 4 bucles con lo que cuando uno de los cuatro tiene éxito la pone a true y terminan todos los hilos y los 4 hilos son creados desde otro hilo el cual se queda esperando con WaitForMultipleObjects. El ProgressBar fue un mal planteamiento la verdad.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Fallo al intentar varios hilos simultaneos jpgonzalez Varios 4 04-08-2015 14:46:52
Eventos simultáneos gesgg C++ Builder 6 28-01-2012 09:34:59
MessageBox y PlaySnd simultáneos ixMike API de Windows 6 25-07-2007 19:12:07
Apache e IIS simultaneos ? HombreSigma Varios 1 27-03-2005 16:29:13
usuarios simultaneos de interbase rrr Firebird e Interbase 1 10-08-2003 10:10:12


La franja horaria es GMT +2. Ahora son las 20:52:20.


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