easymacro/doc/docs/tools/threads.md

1.2 KiB

Ejecutar macros en otros hilos.

Las macros se ejecutan en un hilo que bloquea cualquier otro proceso dentro de la aplicación.

Si ejecutas la siguiente macro main, nota que no puedes hacer algo más dentro de LibreOffice durante los 5 segundos que dura el proceso.

import easymacro as app

def hacer_pausa(segundos):
    app.sleep(segundos)
    app.debug('He terminado')
    return

def main():
    hacer_pausa(5)
    app.msgbox('Fin...')
    return

Hasta que aparece el cuadro de mensaje con la palabra Fin y lo cierras, el usuario puede seguir usando la aplicación. En algunos casos no queremos esto, para ello se usan los hilos de ejecución.


run_in_thread

Ahora ejecutamos la macro en otro hilo, "decorando" cualquier macro con run_in_thread

@app.run_in_thread
def hacer_pausa(segundos):
    app.sleep(segundos)
    app.debug('He terminado')
    return

def main():
    hacer_pausa(5)
    app.msgbox('Fin...')
    return

Nota que ahora el mensaje aparece inmediatamente y no tras los 5 segundos.

!!! warning "Cuidado"

Ponga mucha atención en **no ejecutar macros en otros hilos** que dependen de algo suceptible de ser cambiado o interceptado por el usuario, por ejemplo, la celda activa.