Page 1 of 1

Multihilo y cierre de DBF

Posted: Sat Mar 01, 2025 12:02 am
by FiveWiDi
Hola a todos,

En un proceso abro una ventana, en esta ventana muestro un XBrowse de una DBF.
En el Valid de la ventana cierro la DBF.

En otra función lanzo un proceso en un Hilo independiente, esta función deberá cerrar la ventana del XBrowse.

Entonces el proceso que está trabajando en el hilo independiente, cuando intenta cerrar la ventana no puede cerrar el DBF.

¿Cómo puedo cerrar un DBF abierto en el hilo principal del programa, desde un hilo diferente?

Muchas gracias,

Re: Multihilo y cierre de DBF

Posted: Sat Mar 01, 2025 5:12 am
by Antonio Linares
Carlos,

Has probado a abrir la DBF como SHARED ?

Re: Multihilo y cierre de DBF

Posted: Sat Mar 01, 2025 7:57 am
by FiveWiDi
Juraría que las abro shared.

Al final acaba cerrándolas, pero me envía un mensaje de error la clase que manejo que me da que no le gusta el multihilo.

Leí que en multihilo puedes incluso usar el mismo alias en diferentes hilos, de ahí mi temor, de que hubiera algún impedimento en cerrarlas.

Investigaré más.

Muchas gracias,

Re: Multihilo y cierre de DBF

Posted: Sat Mar 01, 2025 8:09 am
by FiveWiDi
Parece que algo tiene que ver el multihilo.

Sin multihilo va de 10.

Las abro shared.

De momento lo salvo quitando el multihilo. De hecho en esa situación en la que se encuentra el programa no es necesario.

Pero siguiré con ello.

Re: Multihilo y cierre de DBF

Posted: Sat Mar 01, 2025 8:52 am
by Otto
Hello,
May I ask why you want to use multithreading?
Actually, I always read about problems with multithreading, even in Xbase.
Couldn't you solve this with a microservice or a well-thought-out architecture (Master/Slave)?

Example: Monthly Financial Report Generation

Step 1: Master EXE (Start.exe)
Starts the following slave EXE files:

- SalesData.exe: Processes sales data and calculates sales tax.
- PurchaseData.exe: Processes purchase data and calculates profit margins.
- InventoryData.exe: Processes inventory data and calculates inventory metrics.
- Reports.exe: Generates the PDF or Excel reports.

Monitors the progress of the slave EXE files using a timer.

Step 2: Slave EXE Files
Each slave EXE writes its results into a shared database or a temporary file.

Step 3: Result Merging
The master EXE checks whether all slave EXE files have completed.

It reads the results from the database or temporary files and generates the final report.

Regards,
Otto

Re: Multihilo y cierre de DBF

Posted: Sat Mar 01, 2025 5:04 pm
by FiveWiDi
Muchas gracias Otto,

El caso es que en un principio se trataba de una aplicación que generaba facturas, y en un corto espacio de tiempo se debía enviar información a la hacienda pública española.
Este envío pensé que podía ser un proceso independiente, transparente para el usuario, que no penalizará las tareas habituales y que tuviera la posibilidad de interactuar con él.

Siendo así, descarté los servicios por que además no estoy habituado a ellos y quería que su instalación fuera muy simple (de hecho con un copiar-pegar, el programa funciona, y es un sólo EXE).

Re: Multihilo y cierre de DBF

Posted: Sat Mar 01, 2025 6:08 pm
by Otto
Carlos,
I see the advantages you are talking about, and indeed, one of FIVEWIN's strengths is that you practically only need to copy an EXE.

One disadvantage I see when packing everything into a single EXE is that the entire program becomes very complex. You have to weigh the pros and cons. I personally use EXEs with a timer function more frequently. For example, when I make a request from the internet, I first create a TXT file with the data for the request. The EXE with the timer then detects it and calls a FIVEWIN program with parameters. If the FIVEWIN program detects that it was called with the "onlinerequest" parameter, I simply start the request within the FIVEWIN program and generate, for example, a PDF, which I then retrieve from the internet.

This works very well for me, and the speed is also good.

Best regards,
Otto

Re: Multihilo y cierre de DBF

Posted: Sat Mar 01, 2025 6:43 pm
by FiveWiDi
Otto,

Ciertamente el EXE lleva muchísimo código, en su momento intenté separar funciones que podrían ser reutilizadas en otros proyectos (arquitectura), pero hace 4 meses me di cuenta de que fracasé en este propósito.
Eso sí el mantenimiento es fácil, tiene 2 clases que son la base de todo el sistema y una estructura de trabajo similar en todos los módulos.

La solución fue relativamente fácil; según para que necesidades o módulos debo habilitar, cambio el menú y los permisos.
El usuario no sabe realmente lo que está dentro de este exe (recibos periódicos, base de personas, actividades de asociaciones, albaranes, facturas, contabilidad, etc. y ahora Verifactu [*]).

Tal como dices es sopesar los pros y contras.

[*] Tanto para sus 'propios' módulos de facturación como para programas externos de terceros.

Re: Multihilo y cierre de DBF

Posted: Mon Mar 03, 2025 6:19 am
by Carles
Carlos,

El sistema de hilos de harbour funciona perfectamente, lo que pasa es que debes ser cuidadoso al programarlo y entender lo que haces. Te recomiendo que te les as este artículo de Rafa que es es tremendo, intentes probar los ejemplos y luego aplicarlo a tu caso.

https://carles9000.github.io/index_doc_ ... arch=hilos

En la página 22 tienes un ejemplo brutal.

Te recomiendo usar un alias para tu dbf en tu hilo...

Saludos.
C.

Re: Multihilo y cierre de DBF

Posted: Mon Mar 03, 2025 10:27 am
by FiveWiDi
Moltes gràcies Carles,

Este documento lo leí una vez pero no sabía donde lo tenía.

Lo releeré.

Seguimos,

Re: Multihilo y cierre de DBF

Posted: Mon Mar 03, 2025 1:36 pm
by JoséQuintas
FiveWiDi wrote: Sat Mar 01, 2025 12:02 am En otra función lanzo un proceso en un Hilo independiente, esta función deberá cerrar la ventana del XBrowse.
Entonces el proceso que está trabajando en el hilo independiente, cuando intenta cerrar la ventana no puede cerrar el DBF.
¿Cómo puedo cerrar un DBF abierto en el hilo principal del programa, desde un hilo diferente?
Para mí esto no tiene sentido.
El multihilo es como tener varios EXEs.
¿Por qué un EXE cerraría archivos del otro EXE?

Re: Multihilo y cierre de DBF

Posted: Wed Mar 05, 2025 10:57 pm
by FiveWiDi
JoséQuintas wrote: Mon Mar 03, 2025 1:36 pm
FiveWiDi wrote: Sat Mar 01, 2025 12:02 am En otra función lanzo un proceso en un Hilo independiente, esta función deberá cerrar la ventana del XBrowse.
Entonces el proceso que está trabajando en el hilo independiente, cuando intenta cerrar la ventana no puede cerrar el DBF.
¿Cómo puedo cerrar un DBF abierto en el hilo principal del programa, desde un hilo diferente?
Para mí esto no tiene sentido.
El multihilo es como tener varios EXEs.
¿Por qué un EXE cerraría archivos del otro EXE?
En cierta manera así es.
Se trata de un software que INICIALMENTE permitía unas tareas y enviaba desatendidamente información mientras el usuario lo usaba, de ahí el multihilo para ese envío.
El caso es que se le modifica su funcionalidad de manera que el envío pasa a ser la única tarea que debe realizar, pero durante la adaptación a ese nuevo propósito no se elimina el multihilo y se establece que se cierre el programa a una hora determinada.
Y esto provocó mi consulta.
¿Cómo cerrar un programa desde un hilo hijo del 'principal', cuando hay una ventana con un Browse de unas DBF que ha sido creada desde el hilo 'principal'?
Este escenario no tenía sentido, y se ha eliminado el multihilo.

Muchas gracias,