+++
title = "Hilos"
weight = 5
+++

#### 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.

```python
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.

### run_in_thread

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

```python
@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.

{{% notice warning %}}
Ponga mucha atención en **no ejecutar macros en otros hilo** que dependen de algo suceptible de ser cambiado o interceptado por el usuario, por ejemplo, la celda activa.
{{% /notice %}}
