Multihilo - Multithread

Multihilo - Multithread

Postby FiveWiDi » Tue Dec 03, 2024 7:28 am

Hola a todos,

A ver..quiero usar el multihilo en Harbour+FWH32b y no lo he hecho nunca.

Si por ejemplo tengo este código:
Code: Select all  Expand view  RUN
FUNCTION uMiroFacturitas( parametro1 )

While facturita:bonita = "MuyBonita"

   uAhoraTeImprimo( parámetro1 , facturita:numero )

   facturita:Skip()
End 


¿Podría usar el multihilo para el uso de la función uAhoraTeImprimo() ?

¿Cómo se haría en este While/End ?

¿Debo tener algo en cuenta durante el proceso, debo vigilar algo durante el proceso?

Muchas gracias,
Un Saludo
Carlos G.

FiveWin 24.02 + Harbour 3.2.0dev (r2403071241), BCC 7.7 Windows 10
FiveWiDi
 
Posts: 1203
Joined: Mon Oct 10, 2005 2:38 pm

Re: Multihilo - Multithread

Postby paquitohm » Tue Dec 03, 2024 8:52 am

Buenos días,

El blog de Rafa aún sigue aportando mucho.
Si tiras del hilo podrás profundizar en tema hilos https://xthefull.blogspot.com/2016/07/t ... vatos.html
paquitohm
 
Posts: 281
Joined: Fri Jan 14, 2022 8:37 am

Re: Multihilo - Multithread

Postby FiveWiDi » Wed Dec 04, 2024 4:03 pm

paquitohm wrote:Buenos días,

El blog de Rafa aún sigue aportando mucho.
Si tiras del hilo podrás profundizar en tema hilos https://xthefull.blogspot.com/2016/07/t ... vatos.html


Muchas gracias paquitohm, lo vi en su día, lo volveré a mirar.
Un Saludo
Carlos G.

FiveWin 24.02 + Harbour 3.2.0dev (r2403071241), BCC 7.7 Windows 10
FiveWiDi
 
Posts: 1203
Joined: Mon Oct 10, 2005 2:38 pm

Re: Multihilo - Multithread

Postby JoséQuintas » Thu Dec 05, 2024 11:15 pm

Multithread es como tener múltiples EXEs.
De esta manera es claramente visible.

https://www.youtube.com/watch?v=KwK2DrLjc8A

Tenga en cuenta que si cierra el proceso principal, se cierra todo (se no haces nada diferente).
Mi uso de fivewin es así, desde una aplicación gtwvg, estoy empezando con la conversión.
No probé solo con fivewin.
JoséQuintas
 
Posts: 44
Joined: Tue Feb 09, 2021 4:20 pm

Re: Multihilo - Multithread

Postby FiveWiDi » Fri Dec 06, 2024 10:33 am

Y cómo harían Ustedes para que un Timer se ejectuara en un hilo diferente.

Yo tengo este código:

Code: Select all  Expand view  RUN
       DEFINE TIMER oVFTimer1 OF oVFWndTimer INTERVAL ( 1000 * nDelay ) ACTION ( oVFTimer1:Deactivate(), ;
                                                                                  lVFLaunchVerifactu( AMPAARRA, uSetGetValInArrBD( AMPAARRA, Nil, 84, Nil ) ), ;
                                                                                  oVFTimer1:Activate() )


¿Cómo hago para que este Timer se ejecute en su propio Hilo?

¿O debo crear el Hilo dentro de la función lVFLaunchVerifactu() ?

Muchas gracias,
Un Saludo
Carlos G.

FiveWin 24.02 + Harbour 3.2.0dev (r2403071241), BCC 7.7 Windows 10
FiveWiDi
 
Posts: 1203
Joined: Mon Oct 10, 2005 2:38 pm

Re: Multihilo - Multithread

Postby Antonio Linares » Sat Dec 07, 2024 7:33 am

Estimado Carlos,

Una reflexión apropiada sería distinguir lo que hace un timer de lo que hace un "hilo de ejecución" y ver hasta que punto son compatibles y deseable el usarlos juntos.

Un timer hace que cada x tiempo se genere un evento desde el cual se ejecuta un proceso. Es decir, todo se para hasta que se completa la ejecución de ese proceso.

Un "hilo de ejecución" lo que hace es "bifurcar" (un tanto artificialmente) la ejecución principal del programa. Es decir, es como si en vez de existir una CPU, existiesen más de una CPU. En realidad la CPU principal "reparte" el tiempo entre cada proceso, aunque a todos los efectos pareciese que se ejecutan en paralelo.

Finalmente la pregunta es: ¿ Que es lo que necesitas hacer para saber que camino tomar ? :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42203
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Multihilo - Multithread

Postby Antonio Linares » Sat Dec 07, 2024 7:41 am

Tiene sentido lo que preguntas :-)

El evento del timer solicitaría que se ejecute un proceso, pero el proceso se ejecutaría en un hilo diferente para no enlentecer la ejecución de la app principal.

Es este el efecto que buscas ?
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42203
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Multihilo - Multithread

Postby Antonio Linares » Sat Dec 07, 2024 7:57 am

Simplemente así:

Code: Select all  Expand view  RUN
DEFINE TIMER oVFTimer1 OF oVFWndTimer INTERVAL ( 1000 * nDelay ) ACTION hb_threadStart( { || lVFLaunchVerifactu( AMPAARRA, uSetGetValInArrBD( AMPAARRA, Nil, 84, Nil ) ) } )

Si usas hbmk2 para construir tu app (es lo más recomendable) recuerda usar el flag -mt para que se construya con soporte de ejecución multihilo

Ojo con el uso de variables compartidas y de DBFs ya que tendrás que usar "mutex"es (semáforos) para aplicar la prioridad deseada.
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42203
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Multihilo - Multithread

Postby Carles » Sat Dec 07, 2024 9:15 am

Bones,

Yo creo q quiere crear un pool de impresiones o imprimir en 2 plano mientras el progeama sigue con la suya. Si es asi lanzar un hilo para ejecurar la tarea y listos.

C.
Salutacions, saludos, regards

"...programar es fácil, hacer programas es difícil..."

UT Page -> https://carles9000.github.io/
Forum UT -> https://discord.gg/bq8a9yGMWh
Skype -> https://join.skype.com/cnzQg3Kr1dnk
User avatar
Carles
 
Posts: 1143
Joined: Fri Feb 10, 2006 2:34 pm
Location: Barcelona

Re: Multihilo - Multithread

Postby xmanuel » Sat Dec 07, 2024 9:31 am

Pienso como Charly.
Además como la impresión no necesita ninguna tutela solo tienes que enviarlo a un subhilo y te olvidas, De hecho deberías tener solo un hilo de impresion al cual enviar las peticiones para el trabajo de imprimir.

Pero para procesos repetitivos en el tiempo, el Timer debería estar en el principal.
______________________________________________________________________________
Sevilla - Andalucía
xmanuel
 
Posts: 763
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla

Re: Multihilo - Multithread

Postby FiveWiDi » Sat Dec 07, 2024 8:20 pm

Hola todos,

El caso práctico es que es una aplicación de facturación que cada 'n' segundos enviará la información ( shellexecute(CURL.EXE) ) de las nuevas 'facturas' a Verifactu.

Es decir, una aplicación que deseo que mientras el usuario hace sus labores habituales, no note que hay un proceso que está enviando información a Verifactu.
Tal como dice Antonio.

Por otro lado, de las DBF usadas en ese proceso, unas sólo las actualiza ese mismo proceso, otras sólo las lee y una última es alimentada por el 'usuario' añadiendo datos de facturas desde el proceso de facturación. Todas se abren (Shared en todos los procesos de la aplicación) y cierran en este proceso y con alias diferentes.
Y de la variables 'compartidas', no se actualiza ninguna en ese proceso y normalmente en otros procesos 'habituales' tampoco. Son de configuración.

Hoy en día estoy compilando con un make.rmk con las lib -mt, aunque no lo estaba usando.

A ver si hoy o mañana pruebo como va.

Muchas gracias a todos.
Un Saludo
Carlos G.

FiveWin 24.02 + Harbour 3.2.0dev (r2403071241), BCC 7.7 Windows 10
FiveWiDi
 
Posts: 1203
Joined: Mon Oct 10, 2005 2:38 pm

Re: Multihilo - Multithread

Postby paquitohm » Sun Dec 08, 2024 7:55 pm

Hola,

Ese tipo de situaciones lo he solucionado rellamando al ejecutable con un parametro para que haga una funcion especifica

En este caso, en el timer, pondria una llamada al ejecutable asi o parecido RUN Algo.exe /ENVIO_VERIFACTU y en el main cogeria el parametro
Esto asegura una correcta comparticion de recursos

Sin duda que el uso de thread es más elegante, pero quizás no más practico. ¿ Que es más elegante y qué es más practico ? ¿ Un coche electrico o un coche de combustion ? Pues eso
paquitohm
 
Posts: 281
Joined: Fri Jan 14, 2022 8:37 am

Re: Multihilo - Multithread

Postby FiveWiDi » Sun Dec 08, 2024 8:35 pm

Yo tengo 3 escenarios y 3 soluciones, 2 funcionan y la tercera está en desarrollo.

a) Un puesto que factura algunas veces a la semana: Verifactu funcionando según se emite factura (on line).

b) Varios puestos que pueden facturar: Verifactu es un ejecutable que se lanza al arrancar el SIF ( des de la aplicación 'principal' Shellexecute( loquesea.exe ) o manualmente desde el escritorio Windows) y que va buscando según un Timer.

c) Aplicación SIF externa que dejará información en unas DBF, y un ejecutable externo que capturará esta información y hará toda la gestión para enviar a Verifactu, buscará según un Timer. El SIF y Verifactu son de desarrolladores diferentes. Esta solución la quiero entregar antes de Navidad.

Seguimos,
Un Saludo
Carlos G.

FiveWin 24.02 + Harbour 3.2.0dev (r2403071241), BCC 7.7 Windows 10
FiveWiDi
 
Posts: 1203
Joined: Mon Oct 10, 2005 2:38 pm

Re: Multihilo - Multithread (duda)

Postby TOTOVIOTTI » Wed Dec 18, 2024 12:12 pm

Hola Estimados...
una consulta porque no lo entiendo bien... a ver si me desburran...

Puedo usar un "thread" cuando inicio mi programa principal?
Ejemplo, hago la presentación de mi sistema y llego a menú principal,
mientras tanto, puedo ir haciendo un "thread" de una lectura de una tabla secundaria, y me guarde
esos datos en la memoria?

Espero se entienda lo que quiero hacer...

Muchas gracias!!

Roberto
Univ@c I.S.I.
Desarrolladores de Software
http://www.elcolegioencasa.edu.ar
User avatar
TOTOVIOTTI
 
Posts: 422
Joined: Fri Feb 05, 2010 11:30 am
Location: San Francisco - Córdoba - Argentina


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 85 guests