51 lines
1.2 KiB
Markdown
51 lines
1.2 KiB
Markdown
|
+++
|
||
|
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 %}}
|